#include <bits/stdc++.h>

using namespace std;

struct cvor{
    int min_klikklak;
    bool masina_ukljucena;
    bool  visited;
    vector<pair<int, bool>> svi_putevi;
    };

int start_cvor;
int cilj_cvor;

void obradi_cvor(bool prethodni_cvor_masina_uljucena, bool dolazni_put_led, int kliklak_prethodnog_cvora, int tekuci_cvor, vector<cvor>& graf)
{
    if(!graf[tekuci_cvor].visited)
    {
        graf[tekuci_cvor].visited = true;
        if(prethodni_cvor_masina_uljucena != dolazni_put_led)
        {
            graf[tekuci_cvor].min_klikklak = kliklak_prethodnog_cvora + 1;
        }
        else
        {
            graf[tekuci_cvor].min_klikklak = kliklak_prethodnog_cvora;
        }

        graf[tekuci_cvor].masina_ukljucena =  dolazni_put_led;
    }
    else
    {
        if(prethodni_cvor_masina_uljucena != dolazni_put_led)
        {
            if((kliklak_prethodnog_cvora + 1) < graf[tekuci_cvor].min_klikklak)
            {
                graf[tekuci_cvor].min_klikklak = kliklak_prethodnog_cvora + 1;
                graf[tekuci_cvor].masina_ukljucena =  dolazni_put_led;
            }
            else
            {
                return;
            }
        }
        else
        {
            if((kliklak_prethodnog_cvora) < graf[tekuci_cvor].min_klikklak)
            {
                graf[tekuci_cvor].min_klikklak = kliklak_prethodnog_cvora;
                graf[tekuci_cvor].masina_ukljucena =  dolazni_put_led;
            }
            else
            {
                return;
            }
        }
    }

    if(tekuci_cvor == cilj_cvor)
        return;

    //cout << tekuci_cvor << endl;
    for(auto u: graf[tekuci_cvor].svi_putevi)
    {
        obradi_cvor(graf[tekuci_cvor].masina_ukljucena,
                     u.second,
                    graf[tekuci_cvor].min_klikklak,
                    u.first,
                    graf);
    }
}

int main()
{
    int n,m;
    cin >> n;
    cin >> m;
    vector<cvor> graf(n);


    for(int i = 0; i < n; i ++)
    {
        graf[i].visited = false;
        graf[i].masina_ukljucena = 0;
    }

    int iz_cvora, u_cvor, led;


    for(int j=0; j<m; j++)
    {
        cin >> iz_cvora >> u_cvor >> led;
        graf[iz_cvora-1].svi_putevi.push_back(pair<int,bool>(u_cvor-1, led==1));
        graf[u_cvor-1].svi_putevi.push_back(pair<int,bool>(iz_cvora-1, led==1));
    }

    cin >> start_cvor >> cilj_cvor;

    cilj_cvor--;

    obradi_cvor(false, false, 0, start_cvor-1, graf);

    //cout << "Resultat:";
    cout << graf[cilj_cvor].min_klikklak;
}