#include <bits/stdc++.h>
#include <vector>

struct grana
{
    int cvor;
    bool led;
};

using namespace std;

int main()
{
    
    long int m, n; // m - broj grana; n - broj cvorova
    cin >> n >> m;
    
    vector<grana> graf[n + 1];
    long tez[n + 1];
    short pre[n + 1];
    short pos[n + 1];
    
    tez[0] = 200001;
    long int a, b, u, v, t;
    for(int i = 1; i <= n; i++)
    {
        pos[i] = 0;
        tez[i] = -1;
        pre[i] = 0;
    }
    
    grana tmp;
    int p;
    for(int i = 0; i < m; i++)
    {
        cin >> a >> tmp.cvor >> tmp.led;
        graf[a].push_back(tmp);
        p = a;
        a = tmp.cvor;
        tmp.cvor = p;
        graf[a].push_back(tmp);
    }
    
    cin >> u >> v;

    tez[u] = 0;
    long pom = 0;
    
    for(int i = 0; i < n - 1; i++)
    {
        for(auto e : graf[u])
        {
            if(pos[e.cvor] != 1)
            {
                pos[e.cvor] = 2;
                if(tez[e.cvor] == -1)
                {
                    if(e.led == pre[u])
                    {
                        tez[e.cvor] = tez[u];
                        pre[e.cvor] = pre[u];
                    }
                    else
                    {
                        tez[e.cvor] = tez[u] + 1;
                        pre[e.cvor] = e.led;
                    }
                }
                else
                {
                    if((pre[u] == 2) && (tez[e.cvor] > tez[u]))
                    {
                        tez[e.cvor] = tez[u];
                        pre[e.cvor] = e.led;
                    }
                    else
                    {
                        if((e.led == pre[u]) && (tez[e.cvor] > tez[u]))
                        {
                            tez[e.cvor] = tez[u];
                            pre[e.cvor] = e.led;
                        }
                        else if(tez[e.cvor] > tez[u] + 1)
                        {
                            tez[e.cvor] = tez[u] + 1;
                            pre[e.cvor] = e.led;
                        }
                        else
                        {
                            pre[e.cvor] = 2;
                        }
                    }
                }
            }
        }
        pos[u] = 1;
        u = 0;
        for(int j = 0; j < n; j++)
        {
            if((tez[j] < tez[u]) && (pos[j] == 2))
            {
                u = j;
            }
        }
    }
    cout << tez[v];
    return 0;
}