#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll N,M,dp[5][200005],gde;
ll INF=9e18;
struct slog{
	ll gde,tip,cena;
	const bool operator < (const slog &a) const{
		return cena>a.cena;
	}
}pp,tren;
vector<slog> graf[200005];
priority_queue<slog> PQ;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin>>N>>M;
	for(int i=1;i<=N;i++){
		dp[0][i]=INF;
		dp[1][i]=INF;
	}
	while(M--){
		cin>>gde>>pp.gde>>pp.tip;
		graf[gde].push_back(pp);
		swap(gde,pp.gde);
		graf[gde].push_back(pp);
	}
	cin>>pp.gde; ///Unosimo pocetnog
	pp.cena=0;
	pp.tip=0;
	PQ.push(pp);
	while(PQ.size()){
		tren=PQ.top();
		PQ.pop();
		if(dp[tren.tip][tren.gde]!=INF)
			continue;
		dp[tren.tip][tren.gde]=tren.cena;
		for(int i=0;i<graf[tren.gde].size();i++){
			pp.gde=graf[tren.gde][i].gde;
			pp.tip=graf[tren.gde][i].tip;
			pp.cena=tren.cena+(pp.tip!=tren.tip);
			PQ.push(pp);
		}
	}
	int kraj;
	cin>>kraj;
	ll r=min(dp[0][kraj],dp[1][kraj]);
	if(r==INF)
		cout<<-1<<"\n";
	else
		cout<<r<<"\n";
	return 0;
}