#include<bits/stdc++.h>

using namespace std;

int main()
{
	int n,m,i,j,trst = 0,sutrst = -1,izlaz(100),pre,k,izlazmin = -1,poc,a,b,t,u,v;;
	
	deque<int> bivsi,izlazbivsi,ibivsi;
	bool potrazio = false,potrazio2 = false;
	vector<vector<int> > graf(n, vector<int>(n, 1));
	vector<int> s;
	cin>>n>>m;
	for(i = 0; i < m;i++){
		cin>>a>>b>>t;
		graf[a][b] = t;
		graf[b][a] = t;
	}
	cin>>u>>v;
	

	poc = u;
	i = 1;
	while(true){
		if(potrazio == false){
		
			if(graf[poc][i] == trst){
				graf[i][poc] = 1;
				bivsi.push_front(poc);
				izlazbivsi.push_front(izlaz);
				ibivsi.push_front(i+1);
				poc = i;
				i = 1;
			}else{
				i++;
				if(i == n+1){
					potrazio == true;
				}
			}
		}else{
			if(graf[poc][i] == sutrst){
				potrazio = false;
				graf[i][poc] = 1;
				bivsi.push_front(poc);
				izlazbivsi.push_front(izlaz);
				ibivsi.push_front(i+1);
				swap(trst, sutrst);
				poc = i;
				i = 1;
				izlaz++;
			}else{
				i++;
				if(i == n+1){
					potrazio2 == true;
				}
			}
			
			if(potrazio2 == true){
				potrazio2 = false;
				if(poc == v){
				izlazmin = max(izlazmin,izlaz);
					if(izlazmin == 0){
						break;
					}
				}
				izlaz = izlazbivsi.at(0);
				bivsi.pop_front();
				poc = bivsi.at(0);
				izlazbivsi.pop_front();
				i = ibivsi.at(0);
				ibivsi.pop_front();
				
				
			}
			if(poc == u && i == n+1){
				break;
			}
			
		}
		
		
		
	}
	
	if(izlazmin == 100){
		cout<<-1;
	}else{
		cout<<izlazmin;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
/*for(j = 1; j <= n;j++){
		if(i == v){
			if(izlaz != -1){
				izlaz++;
			}
			
			izlazpravi = max(izlazpravi,izlaz);
			i = pre+1;
			j = 0
		}
		if(potrazio == false){
			if(graf[i][j] == trst){
				
				graf[j][i] = 1
				pre = i;
				i = j;
				j = 1;
				
			}
		}else{
			if(graf[i][j] == sutrst){
				izlaz+=1;
				pre = i;
				graf[j][i] = 1;
				i = j;
				j = 1;
				potrazio == false;
				swap(trst, sutrst);
			}else{
				izlaz = -1;
			}	
		}
		if(j == n){
			potrazio == true
		}
			
}*/

		
		
	
	
	




	return 0;
}