#include <iostream>
using namespace std;
#define MAX INT_MAX
int X[5000][5000];
int pos[5000];
int niz[5000];
int N;
void nulamat()
{
    for(int i=0;i<=N;i++)
    for(int j=0;j<N;j++){
        X[i][j]=0;
    }
}
void nulaniz()
{
    for(int i=0;i<=N;i++){
        pos[i]=0;
        niz[i]=0;}

}
int mini()
{
    int m=MAX;
    for(int i=1;i<=N;i++){
        if(niz[i]!=0 && niz[i]<m)
            m=niz[i];
    }
   return m;
}
void dfs(int i,int j,int k,int q,int l)
{
    pos[i]=1;
    for(int p=1;p<=N;p++)
        if(X[i][p]!=0 && pos[p]==0){
             if(q!=0 && q!= X[i][p])
                        k++;
             if(p==j)
                niz[l++]=k;
             dfs(p,j,k,X[i][p],l);
    }
}
int main()
{
    int M,a,b,t,u,v,k;
    cin>>N>>M;
    nulamat();
    for(int i=0;i<M;i++){
        cin>>a>>b>>t;
        X[a][b]=t+1;
    }
    cin>>u>>v;
    if(X[u][v]!=0)
        cout<<"1";
    else{
       nulaniz();
        dfs(u,v,1,0,1);
        if(mini()==MAX)
            cout<<"-1";
        else
            cout<<mini();
    }
 return 0;

}