#include <bits/stdc++.h>
#define fi first
#define se second

using namespace std;

vector<vector<pair<int,int>>> pov;
vector<pair<int,int>> dp;
bool pos[200010];

int n,m,u,v;

bool dfs(int p, int k){
    queue<int> red;
    red.push(p);
    for(int i=0;i<n;i++) pos[i]=false;
    while(!red.empty()){
        int ind=red.front();
        red.pop();
        pos[ind]=true;
        if(ind==v) return true;
        for(int i=0;i<pov[ind].size();i++){
            if(pov[ind][i].fi==k) return true;
            if(!pos[pov[ind][i].fi]) red.push(pov[ind][i].fi);
        }
    }
    return false;
}

void resi(){
    for(int i=0;i<n;i++){
        dp.push_back(make_pair(-1,0));
    }
    dp[v].fi=0;
    stack<int> stek;
    stek.push(v);
    for(int i=0;i<n;i++) pos[i]=false;
    while(!stek.empty()){
        int ind=stek.top();
        stek.pop();
        if(pos[ind]==true) continue;
        pos[ind]=true;
        for(int i=0;i<pov[ind].size();i++){
            int upo=pov[ind][i].fi;
            if(!pos[upo]){
                stek.push(upo);
                if(dp[upo].fi==-1){
                    if(pov[ind][i].se==dp[ind].se || dp[ind].se==2){
                        dp[upo].fi=dp[ind].fi;
                        dp[upo].se=pov[ind][i].se;
                    }
                    else{
                        dp[upo].fi=dp[ind].fi+1;
                        dp[upo].se=pov[ind][i].se;
                    }
                }else{
                    if(pov[ind][i].se==dp[ind].se || dp[ind].se==2){
                        if(dp[upo].fi>dp[ind].fi){
                            dp[upo].fi=dp[ind].fi;
                            dp[upo].se=pov[ind][i].se;
                        }else if(dp[upo].fi==dp[ind].fi && dp[upo].se!=pov[ind][i].se){
                            dp[upo].se=2;
                        }
                    }
                    else{
                        if(dp[upo].fi>dp[ind].fi+1){
                            dp[upo].fi=dp[ind].fi+1;
                            dp[upo].se=pov[ind][i].se;
                        }else if(dp[upo].fi==dp[ind].fi+1 && dp[upo].se!=pov[ind][i].se){
                            dp[upo].se=2;
                        }
                    }
                }
            }
        }
    }
    cout<<dp[u].fi+dp[u].se;
    return;
}

int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        vector<pair<int,int>> pom; pov.push_back(pom);
    }
    for(int i=0;i<m;i++){
        int a,b,t; cin>>a>>b>>t;
        a--; b--;
        pov[a].push_back(make_pair(b,t));
        pov[b].push_back(make_pair(a,t));
    }
    cin>>u>>v;
    u--; v--;
    if(!dfs(u,v)) cout<<-1;
    else{
        resi();
    }
    return 0;
}