#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>

using namespace std;
vector<vector<int>> Sante;
int N,M;
int min(int x, int y)
{
    return x * (x <= y) + y * (y < x);
}
int DFS(bool visited[],int Pocetni, int Krajnji, bool Stanje)
{
    if(Pocetni==Krajnji)
    {
        return 0;
    }
    int Broj = 2000000000;
    visited[Pocetni]=true;
    for(int i = 0; i<N; ++i)
    {
        if(Sante[Pocetni][i]==1 && !visited[i])
        {
            Broj=min(Broj,DFS(visited,i,Krajnji,1)+!Stanje);
        }
        else if(Sante[Pocetni][i]==0 && !visited[i])
        {
            Broj=min(Broj,DFS(visited,i,Krajnji,0)+Stanje);
        }
    }
    return Broj;
}
int main()
{
    cin>>N>>M;
    bool visited[N];
    memset(visited,0,sizeof(visited));
    for(int i = 0; i<N; ++i)
    {
        vector<int> A;
        for(int j = 0; j<N; ++j)
        {
            A.insert(A.end(),-1);
        }
        Sante.insert(Sante.end(),A);
    }
    for(int i = 0; i<M; ++i)
    {
        int x,y,z;
        cin>>x>>y>>z;
        Sante[x-1][y-1]=z;
        Sante[y-1][x-1]=z;
    }
    int Pocetni,Krajnji;
    cin>>Pocetni>>Krajnji;
    Pocetni-=1;
    Krajnji-=1;
    cout<<DFS(visited,Pocetni,Krajnji,0);
    return 0;
}