#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll>A[200010];
map<pair<ll,ll>,ll>tip;
ll roditelj[200010]={0},vis[200010]={0},p[200010]={0};
ll res=1e9;
void dfs(ll cvor,ll cale,ll kraj,ll kolko,ll dal)
{
   // cout << cvor << " " << cale << " " << endl;
    if(cvor==kraj)
    {
        res=min(res,kolko);
        return;
    }
    if(p[cvor]) return;
    p[cvor]=1;
    for(auto x:A[cvor])
    {
        if(tip[{x,cvor}]!=dal)
        {
             dfs(x,cvor,kraj,kolko+1,dal^1);
        }
        else dfs(x,cvor,kraj,kolko,dal);
    }
}
void dfs2(ll cvor,ll kolko,ll dal,ll kraj)
{
    if(cvor==kraj)
    {
        res=min(res,kolko);
        return;
    }
    if(p[cvor]) return;
    p[cvor]=1;
    for(auto x:A[cvor])
    {
        if(tip[{x,cvor}]!=dal)
        {
            dfs2(x,kolko+1,dal^1,kraj);
        }
        else dfs2(x,kolko,dal,kraj);
    }
    p[cvor]=0;
}
int main(int argc, char *argv[])
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    ll n,m;
    cin >> n >> m;
    for(ll i=1;i<=m;i++)
    {
        ll u,v,x;
        cin >> u >> v >> x;
        A[u].push_back(v);
        A[v].push_back(u);
        tip[{u,v}] = x;
        tip[{v,u}] = x;
    }
    ll u,v;
    cin >> u >> v;
    dfs2(u,0,0,v);
    if(res==1e9) cout << -1;
    else cout << res;
}