#include <bits/stdc++.h>

using namespace std;

#define MAXN 200010

long long n,m;
vector<pair<long long,long long>> adj[MAXN];
long long start,cilj;
bool pos[MAXN];
long long stanje[MAXN];
long long sum[MAXN];

void dfs1(long long node)
{
    pos[node]=true;

    long long s=adj[node].size();

    for (long long i=0;i<s;i++)
    {
        long long sled=adj[node][i].first;
        long long put=adj[node][i].second;

        if (pos[sled]==false)
        {
            stanje[sled]=put;

            if (stanje[sled]!=stanje[node]) sum[sled]=sum[node]+1;
            else sum[sled]=sum[node];

            dfs1(sled);
        }
    }
}

void dfs(long long node)
{
    pos[node]=true;

    long long s=adj[node].size();

    for (long long i=0;i<s;i++)
    {
        long long sled=adj[node][i].first;

        if (pos[sled]==false) dfs(sled);
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>m;

    long long br=0;

    for (long long i=1;i<=m;i++)
    {
        long long x,y,z;
        cin>>x>>y>>z;

        adj[x].push_back({y,z});
        adj[y].push_back({x,z});

        if (z==1) br++;
    }

    cin>>start>>cilj;

    if (br==m)
    {
        for (long long i=0;i<MAXN;i++) pos[i]=false;

        dfs(start);

        if (pos[cilj]==false) cout<<-1<<endl;
        else cout<<1<<endl;
    }

    else if (m==n-1)
    {
        for (long long i=0;i<MAXN;i++) pos[i]=false;
        for (long long i=0;i<MAXN;i++) sum[i]=0;

        dfs(start);

        if (pos[cilj]==false) cout<<-1<<endl;
        else
        {
            for (long long i=0;i<MAXN;i++) stanje[i]=-1;
            for (long long i=0;i<MAXN;i++) pos[i]=false;

            stanje[start]=0;

            dfs1(start);

            cout<<sum[cilj]<<endl;
        }
    }
}