#include using namespace std; typedef long long ll; typedef pair ii; const int N = 2e5+100; vector g[N]; int n; bool dp_dn[N][2]; map mp; void fil(vector &d, function f, int def){ int ls=def; for(auto &i : d){ i = f(ls, i); ls = i; } } void proc(vector &pref, vector &suf, function f, int def){ fil(pref, f, def); reverse(suf.begin(), suf.end()); fil(suf, f, def); reverse(suf.begin(), suf.end()); } void dfs_prep(int v, int par){ int cnt=0; vector ch, pref, suf; dp_dn[v][0] = 1; for(auto u : g[v]){ if(u == par) continue; cnt ++; dfs_prep(u, v); dp_dn[v][0] *= dp_dn[u][1]; ch.push_back(u); pref.push_back(dp_dn[u][1]); suf.push_back(dp_dn[u][1]); } dp_dn[v][1] = dp_dn[v][0]; proc(pref, suf, [&](int a, int b){return a*b;}, 1); for(int i=0 ; i= 0){ int w = mp[ii(v, par)]; ans ^= up_used * dp_dn[v][0] * w; } vector used, unused, ch, pref, suf, ppref, ssuf; for(auto u : g[v]){ if(u == par) continue; ch.push_back(u); pref.push_back(dp_dn[u][1]); suf.push_back(dp_dn[u][1]); used.push_back(0); unused.push_back(0); } proc(pref, suf, [&](int a, int b){return a*b;}, 1); for(int i=0 ; i=0 ; i--){ int cur = ss * (i ? pref[i-1] : 1); unused[i] ^= cur * up_unused; int u = ch[i]; if(!dp_dn[u][1]) ss = 0; ss ^= ssuf[i]; dfs(u, v, used[i], unused[i]); } } } signed main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin >> n; for(int i=0 ; i> v >> u >> w;v --;u --; g[v].push_back(u); g[u].push_back(v); mp[ii(v, u)] = w; mp[ii(u, v)] = w; } dfs_prep(0, -1); dfs(); cout << ans << "\n"; }