#include <iostream>
#include <vector>
using namespace std;

struct Veza{
    int tacka;
    bool tezina;
};

class Santa{
    public:
    vector<Veza> veze;
    void dodaj(int t1, bool t);
};

void Santa::dodaj(int t1, bool t){
    Veza v;
    v.tacka = t1;
    v.tezina = t;
    veze.push_back(v);
}

void putanje(int a, int b, vector<bool> posecen, vector<Santa> s, int& minTezina, int tTezina, bool pTezina, bool promTezina){
    posecen[a] = true;

    if(a == b){
        if(tTezina < minTezina)
            minTezina = tTezina;
    }
    else{
        for (int i = 0; i < s[a].veze.size(); i++)
        {
            if(!posecen[s[a].veze[i].tacka]){
                if(s[a].veze[i].tezina != pTezina){
                    tTezina++;
                    pTezina = !pTezina;
                    promTezina = true;
                }
                else
                    promTezina = false;
                putanje(s[a].veze[i].tacka, b, posecen, s, minTezina, tTezina, pTezina, promTezina);
            }
        }
    }
    posecen[a] = false;
    if(promTezina)
        tTezina--;
}

int main(){
    int n, m;
    cin >> n >> m;
    vector<Santa> s(n);
    for (int i = 0; i < m; i++){
        int x, y, put;
        cin >> x >> y >> put;
        s[x-1].dodaj(y-1, (put==1));
        s[y-1].dodaj(x-1, (put==1));
    }

    int a, b;
    cin >> a >> b;
    
    vector<bool> posecen(n, false);
    int tezina = INT_MAX;
    putanje(a-1, b-1, posecen, s, tezina, 0, false, false);
    cout << tezina;
}