#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct poredak{bool operator()(tuple<int,int,int>t1,tuple<int,int,int>const t2){if(get<0>(t1)==get<0>(t2)){return get<2>(t1)>get<2>(t2);}return  get<0>(t1)>get<0>(t2);}};
vector<vector<pair<int,int>>>cvor(200001);
vector<pair<int,int>>razdaljina(200001);
priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,poredak>red;
void najkraci(int N,int MI,int LA){for(int i=0;i<=N;i++){razdaljina[i]=(make_pair(1000000,0));}red.push(make_tuple(0,MI,0));
razdaljina[MI]=make_pair(0,0);
while(!red.empty()){int prethodni=get<1>(red.top());
int stanje=get<2>(red.top());
red.pop();
if(prethodni==LA){break;}for (int i=0;i<cvor[prethodni].size();i++){int sledbenik=cvor[prethodni][i].first;
int tez=cvor[prethodni][i].second;
if (tez==stanje){if(razdaljina[sledbenik].first>razdaljina[prethodni].first){razdaljina[sledbenik]=razdaljina[prethodni];
red.push(make_tuple(razdaljina[sledbenik].first,sledbenik,razdaljina[sledbenik].second));}}if(tez!=stanje){if(razdaljina[sledbenik].first>razdaljina[prethodni].first+1){razdaljina[sledbenik].first=razdaljina[prethodni].first+1;
razdaljina[sledbenik].second=(razdaljina[prethodni].second+1)%2;
red.push(make_tuple(razdaljina[sledbenik].first,sledbenik,razdaljina[sledbenik].second));}}}}if(razdaljina[LA].first==1000000){cout<<-1<<endl;
return;}cout<<razdaljina[LA].first<<endl;}int main(){int N,M;
cin>>N;
cin>>M;
for(int i=0;i<M;i++){int a,b,t;
cin>>a;
cin>>b;
cin>>t;
cvor[a].push_back(make_pair(b,t));
cvor[b].push_back(make_pair(a,t));}int MI,LA;
cin>>MI;
cin>>LA;
najkraci(N,MI,LA);
return 0;}