#include <bits/stdc++.h>
using namespace std;

int n, m;
int a, b, t;
int u, v;

vector<int> graf[200005];
vector<int> grafProhodnost[200005];
bool posecen[200005];
int minPromenjenaStanja;
bool nasaoPut = false;

int dfs(int currentPoint, int stanje, int stanjaPromenjena)
{
	if (stanjaPromenjena > minPromenjenaStanja)
	{
		return 0;
	}
	posecen[currentPoint] = true;
	if (currentPoint == v)
	{
		if (stanjaPromenjena < minPromenjenaStanja)
		{
			minPromenjenaStanja = stanjaPromenjena;
			nasaoPut = true;
		}
		//cout << "NASAO" << currentPoint << " - " << stanje << " - " << stanjaPromenjena << endl;
	}
	for (int i = 0; i < graf[currentPoint].size(); ++i)
	{
		if (posecen[graf[currentPoint][i]] == true) continue;
		//cout << "IDEM IZ " << currentPoint << " U " << graf[currentPoint][i] << endl;
		//cout << "TRENUTNO STANJA PROMENJENA " << stanjaPromenjena << endl;
		if (grafProhodnost[currentPoint][i] != stanje)
		{
			//cout << "AU NEPROHODNO JE" << endl;
			dfs(graf[currentPoint][i], !stanje, stanjaPromenjena+1);
		}
		else
		{
			dfs(graf[currentPoint][i], stanje, stanjaPromenjena);
		}
	}
	posecen[currentPoint] = false;
}

int main()
{
	scanf("%d %d", &n, &m);
	for (int i = 0; i < m; ++i)
	{
		scanf("%d %d %d", &a, &b, &t);
		graf[a].push_back(b);
		graf[b].push_back(a);
		grafProhodnost[a].push_back(t);
		grafProhodnost[b].push_back(t);
	}
	scanf("%d %d", &u, &v);
	minPromenjenaStanja = INT_MAX;
	dfs(u, 0, 0);
	if (nasaoPut == false)
	{
		printf("-1");
		return 0;
	}
	printf("%d", minPromenjenaStanja);
	return 0;
}