#include <stdio.h>
#include <stdlib.h>
#include <utility>
#include <vector>
#include <iostream>

using namespace std;

vector <int> grupa2;

void dfs(int i, vector<int>*s, int *obidjeni, int n, int k)
{
    //printf("%d   ",i);
    if (!obidjeni[i]) grupa2.push_back(i);
    obidjeni[i]=1;
    for (int j=0;j<s[i].size();j++)
    {
        int poz=k*s[i].at(j);
        if (poz<0) continue;
        if (!obidjeni[poz]) dfs(poz,s,obidjeni,n,k);
    }
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    vector < int > s[n+10];
    for (int i=0;i<m;i++)
    {
        int x,y,a;
        scanf("%d%d%d",&x,&y,&a);
        int xx=x,yy=y;
        if (a) {x*=-1;y*=-1;}
        s[xx].push_back(y);
        s[yy].push_back(x);
    }
    int poc,kraj;
    scanf("%d%d",&poc,&kraj);
    int *obidjeni=(int*)calloc((n+10),sizeof(int));
    int *brojPonavljanja=(int*)calloc((n+10),sizeof(int));
    vector <int> grupa;
    grupa.push_back(poc);
    int k=1;int br=0;
    obidjeni[poc]=1;
    while (obidjeni[kraj]==0)
    {
        if (grupa.size()==0)
        {
            printf("-1");
            return 0;
        }
        for (int i=0;i<grupa.size();i++)
        {
            brojPonavljanja[grupa[i]]++;
            dfs(grupa[i],s,obidjeni,n,k);
            //printf("\n");
            if (brojPonavljanja[grupa[i]]==2) grupa.erase(grupa.begin()+i);
        }
        for (int i=0;i<grupa2.size();i++) grupa.push_back(grupa2[i]);
        grupa2.clear();
        k*=-1;
        br++;
    }
    printf("%d",br-1);
}