#include <bits/stdc++.h>

using namespace std;

struct edge
{
    int v2;
    int t;
};

void addEdge(vector<edge> v[],int x,int y,int t)
{
    struct edge ivica1={y,t};
    struct edge ivica2={x,t};
    v[x].push_back(ivica1);
    v[y].push_back(ivica2);
}

void DFS(vector<edge> v[], bool vis[],int x,vector<int> &teksloj,int usl)
{
    if(!v[x].empty())
        for(int i=0;i<v[x].size();i++)
        {
            if((v[x][i].t==usl)&&(vis[v[x][i].v2]==false))
            {
                vis[v[x][i].v2]=true;
                teksloj.push_back(v[x][i].v2);
                DFS(v,vis,v[x][i].v2,teksloj,usl);
            }
        }
}

void solve(vector<edge> v[],bool vis[],vector<int> &teksloj,vector<int> &prosloj,int brsl,int usl,int kraj,int& qq)
{
    for(int i=0;i<prosloj.size();i++)
        DFS(v,vis,prosloj[i],teksloj,usl);
    for(int i=0;i<teksloj.size();i++)
    {
        if(teksloj[i]==kraj)
        {
            qq=brsl;
            return ;
        }
    }
    if(teksloj.size()==0)
        return ;
    prosloj.clear();
    prosloj=teksloj;
    teksloj.clear();
    brsl+=1;
    usl=1-usl;
    solve(v,vis,teksloj,prosloj,brsl,usl,kraj,qq);
    return ;
}

int main()
{
    int n,m,a,b,t,r1,r2;
    cin>>n>>m;
    vector<edge> v[n];
    vector<int> prosloj;
    vector<int> teksloj;
    bool vis[n];
    for(int i=0;i<n;i++)
        vis[i]=false;
    for(int i=0;i<m;i++)
    {
        cin>>a>>b>>t;
        addEdge(v,a-1,b-1,t);
    }
    cin>>a>>b;
    a--;
    b--;
    prosloj.push_back(a);
    int qq=-1;
    solve(v,vis,teksloj,prosloj,0,0,b,qq);
    r1=qq;
    qq=-1;
    for(int i=0;i<n;i++)
        vis[i]=false;
    teksloj.clear();
    prosloj.clear();
    prosloj.push_back(a);
    solve(v,vis,teksloj,prosloj,0,1,b,qq);
    r2=qq+1;
    if((r1>-1)&&(r2>0))
        cout<<min(r1,r2)<<endl;
    else
    {
        if((r1==-1)&&(r2==0))
            cout<<-1<<endl;
        else
            cout<<max(r1,r2)<<endl;
    }
}