#include <bits/stdc++.h>
using namespace std;
int n,m,mika,laza,a,br,b;
float c;
bool bio[200007];
int D[200005];
int res[500005];
struct slog{
   int prvi,drugi,znak,t;
   bool operator < (const slog &a) const{
      return t > a.t;
   }
}sl;
vector <slog> v[200005];
priority_queue <slog> H;
void Dijk(int a){
	sl.drugi=a;
  sl.prvi=-1;
  sl.znak=0;
  sl.t=0;
  H.push(sl);
  while(H.size()){
		sl=H.top();
    H.pop();
    if(bio[sl.drugi])continue;
			 bio[sl.drugi]=true;
			 D[sl.drugi]=sl.t;
			 res[sl.drugi]=sl.prvi;
       int x=sl.drugi;
       int vreme=sl.t;
       int prohodnost=sl.znak;
     for(int i=0;i<v[x].size();i++){
        sl.drugi=v[x][i].drugi;
        if (bio[sl.drugi])continue;
        sl.znak=v[x][i].znak;
        sl.t=v[x][i].t;
        if(sl.znak!=prohodnost)sl.t=vreme+1;
        sl.prvi=x;
        H.push(sl);
     }
  }
}
int main(){
cin>>n>>m;
memset(res,-1,sizeof(res));
for(int i=1;i<=m;i++){
    cin>>a>>b>>c;
    sl.drugi=b;
    sl.znak=c;
    v[a].push_back(sl);
}
cin>>mika>>laza;
Dijk(mika);
/*/for(int i=1;i<=n;i++){
    cout<<i<<" "<<res[i]<<" "<<D[i]<<endl;
}/*/
if(res[laza]==-1){
	cout<<"-1"<<endl;
	return 0;
}
else cout<<D[laza]<<endl;


return 0;
}