#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 1000000000
int n;
vector<vector<vector<int>>> v;
vector<vector<int>> up;
vector<int> pr, sp;
void dfs(int x, int p, int val){
pr[x] = (pr[p] ^ val);
for (auto el : v[x]){
if (el[0] != p){
dfs(el[0], x, el[1]);
}
}
}
void calc(int x, int p, int wh){
if (x != wh) up[wh][x] = up[wh][p] + 1;
for (auto el : v[x]){
if (el[0] != p) calc(el[0], x, wh);
}
}
int dist(int a, int b){
if (sp[b] == 1) swap(a, b);
return up[a][b];
}
int check(int a, int b, int mask){
int xo = (pr[a] ^ pr[b]);
int val = (xo | mask);
if (val == mask) return 1;
return 0;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int s, t, a, b, w, m = 0;
cin>>n;
cin>>s>>t;
v.assign(n + 1, vector<vector<int>>()), up.assign(n + 1, vector<int>());
pr.assign(n + 1, 0), sp.assign(n + 1, 0);
sp[s] = sp[t] = 1;
vector<vector<int>> al;
for (int i = 0; i < n - 1; i++){
cin>>a>>b>>w;
if (w == 0){
v[a].push_back({b, w});
v[b].push_back({a, w});
}
else{
v[a].push_back({b, (1<<m)});
v[b].push_back({a, (1<<m)});
al.push_back({a, b, w});
sp[w] = 1;
m++;
}
}
dfs(1, 0, 0);
for (int i = 1; i <= n; i++){
if (sp[i] == 0) continue;
up[i].assign(n + 1, 0);
calc(i, 0, i);
}
int ans = INF;
if (check(s, t, 0) == 1) ans = dist(s, t);
int ti = (1<<m);
vector<vector<int>> dp(ti, vector<int>(m, INF));
for (int i = 0; i < m; i++){
if (check(al[i][2], s, 0) == 1) dp[(1<<i)][i] = dist(al[i][2], s);
}
for (int i = 1; i < ti; i++){
vector<int> us, nus;
for (int j = 0; j < m; j++){
int val = (i & (1<<j));
if (val != 0) us.push_back(j);
else nus.push_back(j);
}
for (auto el : us){
int cur = al[el][0];
if (dist(al[el][2], al[el][1]) < dist(al[el][2], al[el][0])) cur = al[el][1];
if (check(cur, al[el][2], i) == 0) dp[i][el] = INF;
else dp[i][el] += dist(cur, al[el][2]);
if (check(cur, t, i) == 1) ans = min(ans, dp[i][el] + dist(cur, t));
for (auto val : nus){
int to = (i | (1<<val));
if (check(cur, al[val][2], i) == 1){
dp[to][val] = min(dp[to][val], dp[i][el] + dist(al[val][2], cur));
}
}
}
}
cout<<ans;
}