//#include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<vector> #include<unordered_map> #include<queue> #include<cstring> #include<stack> usingnamespace std; #define ls rt<<1 #define rs rt<<1|1 #define LL long long #define ll long long #define ULL unsigned long long #define MAXN 2e9 #define mod 1000000007 #define MS 100009
int n,m,k; structnode{ int poi,val; }; vector<node > vc[MS]; int sum[MS]; int dir[MS*30][2], tot;
voiddfs(int u,int f){ for (auto v:vc[u]){ if (v.poi != f){ sum[v.poi] = sum[u]^v.val; dfs(v.poi,u); } } }
voidinsert(int x){ for (int i=30,u=0;i>=0;i--){ int t = (x>>i)&1; if (!dir[u][t]) dir[u][t] = ++tot; u = dir[u][t]; } }
intquery(int x){ int ans = 0; for (int i=30,u=0;i>=0;i--){ int t = (x>>i)&1; if (dir[u][t^1]){ ans += (1<<i); u = dir[u][t^1]; } else { u = dir[u][t]; } } return ans; }
voidsolve(){ cin >> n; for (int i=2;i<=n;i++){ int u,v,w; cin >> u >> v >> w; vc[u].push_back({v,w}); vc[v].push_back({u,w}); } dfs(1,0); int ans = 0; for (int i=1;i<=n;i++) insert(sum[i]); for (int i=1;i<=n;i++) ans = max(ans,query(sum[i])); cout << ans << "\n"; }
intmain(){ ios::sync_with_stdio( false ); int ce = 1; //cin >> ce; while (ce--) solve(); return0; }