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

void TheOnePieceVoda(list<int> adj_listLed[],list<int> adj_listVoda[],vector<int>& NajmanjeVremena,int u,int potez);

void add_edge(list<int> adj_list[], int u, int v) {    //add v into the list u, and u into list v
   adj_list[u].push_back(v);
   adj_list[v].push_back(u);
}

void TheOnePieceLed(list<int> adj_listLed[],list<int> adj_listVoda[],vector<int>& NajmanjeVremena,int u,int potez){
    list<int> :: iterator it;
    for(it = adj_listLed[u].begin(); it != adj_listLed[u].end(); ++it) {
        //cout << u << "  od koga gledam " << *it << " njegovo trenutno  " << NajmanjeVremena[*it] << " broj poteza " << potez << " ledeni " << endl;
        if(potez<NajmanjeVremena[*it]){
            NajmanjeVremena[*it]=potez;
            TheOnePieceLed(adj_listLed,adj_listVoda,NajmanjeVremena,*it,potez);
        }
    }
    potez++;
    for(it = adj_listVoda[u].begin(); it != adj_listVoda[u].end(); ++it) {
        //cout << u << "  od koga gledam " << *it << " njegovo trenutno  " << NajmanjeVremena[*it] << " broj poteza " << potez << " vodeni " << endl;
        if(potez<NajmanjeVremena[*it]){
            NajmanjeVremena[*it]=potez;
            TheOnePieceVoda(adj_listLed,adj_listVoda,NajmanjeVremena,*it,potez);
        }
    }
}

void TheOnePieceVoda(list<int> adj_listLed[],list<int> adj_listVoda[],vector<int>& NajmanjeVremena,int u,int potez){
    list<int> :: iterator it;
    for(it = adj_listVoda[u].begin(); it != adj_listVoda[u].end(); ++it) {
        //cout << u << "  od koga gledam " << *it << " njegovo trenutno  " << NajmanjeVremena[*it] << " broj poteza " << potez << " vodeni " << endl;
        if(potez<NajmanjeVremena[*it]){
            NajmanjeVremena[*it]=potez;
            TheOnePieceVoda(adj_listLed,adj_listVoda,NajmanjeVremena,*it,potez);
        }
    }
    potez++;
    for(it = adj_listLed[u].begin(); it != adj_listLed[u].end(); ++it) {
        //cout << u << "  od koga gledam " << *it << " njegovo trenutno  " << NajmanjeVremena[*it] << " broj poteza " << potez << " ledeni " << endl;
        if(potez<NajmanjeVremena[*it]){
            //cout << "ovaj jebeni cigan " << *it << "  " << potez << endl;
            NajmanjeVremena[*it]=potez;
            TheOnePieceLed(adj_listLed,adj_listVoda,NajmanjeVremena,*it,potez);
        }
    }
}

int main() {
    int n,m,a,b,t,l,k;
    cin >> n >> m;
    list<int> adj_listLed[n];
    list<int> adj_listVoda[n];
    vector<int> NajmanjeVremena(n,2000001);
    for(int i=0;i<m;i++){
        cin >> a >> b >> t;
        a--; b--;
        if(t==1)
            add_edge(adj_listLed,a,b);
        else
            add_edge(adj_listVoda,a,b);
        //cout << "doslo ovden barem " << i << endl;
    }
    //cout << "doslo ovden barem" << endl;
    cin >> l >> k;
    l--; k--;
    NajmanjeVremena[l]=0;
    TheOnePieceVoda(adj_listLed,adj_listVoda,NajmanjeVremena,l,0);
    if(NajmanjeVremena[k]==2000001)
        cout << -1 << endl;
    else
        cout << NajmanjeVremena[k] << endl;
    return 0;
}