#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>    // std::find
#include <vector>
using namespace std;


int mini(int d[], bool t[],int n){
    int m=2*n,in;
    for(int i=0;i<n;i++){
        if(t[i]==false && d[i]<=m){
            m=d[i];
            in=i;
        }
    }
    //cout<<"majom"<<in<<endl;
    return in;
}

void keres(const vector<vector<pair<int,int> > > &a, int n, int x, int y){
    int d[n];
    bool t[n];
    int p[n];
    p[x]=0;
    for(int i=0;i<n;i++){
        d[i]=2*n;
        t[i]=false;
        p[i]=0;
    }
    d[x]=0;
    for(int i=0;i<n;i++){
        //cout<<"INdex"<<i<<" ";
        int m=mini(d,t,n);
        t[m]=true;
        int z=p[m];
        for(int j=0;j<a[m].size();j++){
            int k,pk,s=0;
            pair<int,int>q;
            q=a[m][j];
            k=q.first;
            pk=q.second;
            //cout<<p[k]<<" "<<pk<<endl;
            if(z!=pk){
                s=1;
            }
            if(!t[k] && d[m]+s<d[k]){
                d[k]=d[m]+s;
                p[k]=pk;
            }
            for(k=0;k<n;k++){
                //cout<<d[k]<<" ";
            }
            //cout<<endl;
        }
    }
    if(d[y]==2*n){
        cout<<-1;
    }
    else{
        cout<<d[y];
    }
}

int main()
{
    int n,m,x,y,z,i;
    cin>>n>>m;
    vector<vector<pair<int,int> > >a(n);
    pair<int,int>b;
    for(i=0;i<m;i++){
        cin>>x>>y>>z;
        x--;
        y--;
        b.first=y;
        b.second=z;
        a[x].push_back(b);
    }
    cin>>x>>y;
    keres(a,n,x-1,y-1);
}