#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
using namespace std;
int n,m;
const int maxn=(int)2e5+10;
vector<pair<int,int>>graf[maxn];
int sol[maxn];
bool visited[maxn];
void dfs(int node, int curr)
{
    if (visited[node])
        return;
    visited[node]=true;
    queue<int>q;
    for (auto x: graf[node])
    {
        if (visited[x.first] && x.second==curr)
        {
            sol[x.first]=min(sol[x.first],sol[node]);
            continue;
        }
        if (visited[x.first] && x.second!=curr)
            continue;
        if (!visited[x.first] && x.second!=curr)
        {
            q.push(x.first);
            continue;
        }
        sol[x.first]=sol[node];
        dfs(x.first, curr);
    }
    while (!q.empty())
    {
        auto x=q.front();
        q.pop();
        if (visited[x])
            sol[x]=min(sol[x],1+sol[node]);
        else
            sol[x]=1+sol[node];
        dfs(x,-curr+1);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    int a,b,w;
    for (int i=0; i<m; i++)
    {
        cin >> a >> b >> w;
        graf[a].pb(mp(b,w));
        graf[b].pb(mp(a,w));
    }
    cin >> a >> b;
    sol[a]=0;
    dfs(a,0);
    if (!visited[b])
        cout << -1;
    else
        cout << sol[b];
    return 0;
}