#include <bits/stdc++.h>
#define MAXN 200010
#define F first
#define S second

using namespace std;

typedef long long ll;

int n, m, a, b, t, start, cilj, rez, Npos;

vector<pair<int, bool>> adj[MAXN]; ///index suseda, da li je grana 0 ili 1
vector<int> zaPosleLed;
vector<int> zaPosleVoda;
bool pos[MAXN];
bool rezNadjen;

void dfs(int node, bool boja)
{
    if(node == cilj)
    {
        rezNadjen = true;
    }
    Npos++;
    pos[node] = true;
    for(auto sled : adj[node])
    {
        if(!pos[sled.F] && boja == sled.S) dfs(sled.F, boja);
        else if(!pos[sled.F] && boja != sled.S)
        {
            if(boja == 0) zaPosleLed.push_back(sled.F);
            else zaPosleVoda.push_back(sled.F);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        cin >> a >> b >> t;
        adj[a].push_back({b, t});
        adj[b].push_back({a, t});
    }
    cin >> start >> cilj;
    dfs(start, 0);
    while(0 == 0)
    {
        rez++;
        for(auto x : zaPosleLed)
        {
            dfs(x, 1);
        }
        zaPosleLed.clear();
        if(rezNadjen == 1)
        {
            cout << rez;
            return 0;
        }
        rez++;
        for(auto x : zaPosleVoda)
        {
            dfs(x, 0);
        }
        zaPosleVoda.clear();
        if(rezNadjen == 1)
        {
            cout << rez;
            return 0;
        }
        if(zaPosleLed.empty())
        {
            cout << "-1";
            return 0;
        }
    }
    return 0;
}