#include <iostream>

using namespace std;
const int inf = 999999999;

int main()
{

    int N,M;
    cin>>N;
    cin>>M;
    int d[N+1];
    bool gotov[N+1];
    bool usisivac[N+1];
    int matrica[N+1][N+1];
    //=========================
    for(int i=1;i<N+1; i++){
        usisivac[i]=false;
        gotov[i]=false;
        d[i]=inf;
    }
    //=========================
    for(int i=1; i<N+1; i++){
        for(int j=1; j<N+1; j++){
            matrica[i][j]=inf;
        }
    }
    //==========================
    int a,b,t;
    for(int i=1; i<M+1; i++){
        cin>>a;
        cin>>b;
        cin>>t;
        matrica[a][b]=t;
        matrica[b][a]=t;
    }
    int m,l;
    cin>>m;
    cin>>l;
    //=========================
    d[0]=inf;
    gotov[0]=true;
    d[m]=0;
    gotov[m]=true;
    for(int i=1; i<N+1; i++){
        if(matrica[m][i]==0){
            d[i]=0;
        }
        else{
            if(matrica[m][i]==1){
                d[i]=1;
                usisivac[i]=true;
            }
        }
    }
    //==========================
    while(true){
        int minimum=inf;
        int index=-1;
        for(int i=1; i<N+1; i++){
            if(!gotov[i] && d[i]!=inf && d[i]<minimum){
                minimum=d[i];
                index=i;
            }
        }
        if(index==-1){
            break;
        }
        for(int i=1; i<N+1; i++){
         if(matrica[index][i]!=inf){
            int broj_promena_stanja;
            if(usisivac[index] && matrica[index][i]==0){
                broj_promena_stanja=1;
            }
            if(usisivac[index] && matrica[index][i]==1){
                broj_promena_stanja=0;
            }
            if(!usisivac[index] && matrica[index][i]==0){
                broj_promena_stanja=0;
            }
            if(!usisivac[index] && matrica[index][i]==1){
                broj_promena_stanja=1;
            }
            if(d[i]>d[index]+broj_promena_stanja){
                d[i]=d[index]+broj_promena_stanja;
                if(broj_promena_stanja==1){
                    usisivac[i]=!usisivac[index];
                }
                if(broj_promena_stanja==0){
                    usisivac[i]=usisivac[index];
                }
            }
         }
        }
        gotov[index]=true;
    }
    //==========================
    if(d[l]==inf){
        cout<<-1;
    }
    else{
        cout<<d[l];
    }



    return 0;
}