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

int n, m;
vector<pair<int, int>> graf[200010];
int a, b, Time;
queue<pair<int, int>> q1, q2;
bool pos[200010];
void bfs(int st) {
    bool barnesto=0;
    while(!q2.empty()) {
        barnesto=1;
        pair<int, int> tren=q2.front(); q2.pop();
        if(tren.first==b) {
            cout << Time;
            exit(0);
        }
        bool urad=0;
        for(auto adj:graf[tren.first]) {
            if(adj.second==st) {
                urad=1;
                if(!pos[adj.first]) {
                    q1.push({adj.first, Time});
                    pos[adj.first]=1;
                }
            }
        }
    }
    while(!q1.empty()) {
        barnesto=1;
        pair<int, int> tren=q1.front(); q1.pop();
        if(tren.first==b) {
            cout << Time;
            exit(0);
        }
        bool urad=0;
        for(auto adj:graf[tren.first]) {
            if(adj.second==st) {
                urad=1;
                if(!pos[adj.first]) {
                    q1.push({adj.first, Time});
                    pos[adj.first]=1;
                }
            }
        }
        q2.push(tren);
    }
    if(!barnesto) {
        cout << -1;
        exit(0);
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n >> m;
    for(int i=0; i<m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        graf[u].push_back({v, w});
        graf[v].push_back({u, w});
    }
    cin >> a >> b;
    pos[a]=1;
    q1.push({a, 0});
    int stanje=0;
    while(true) {
        bfs(stanje);
        stanje=1-stanje;
        Time++;
    }
}
/*
8 11
1 2 0
1 3 1
1 4 1
2 5 0
2 8 1
3 5 0
3 4 1
3 6 0
4 6 0
5 7 1
5 8 1
7 4
*/