全MLE,0pts
#include <cstdio>
#include <vector>
#include <cstring>
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
const int N=31e5+7;
struct Trie {
int ch[N][2];
int siz;
inline Trie() {
siz=0;
memset(ch,0,sizeof(ch));
}
inline void insert(int x) {
int u=0;
for(int i=31;~i;--i) {
int c=x>>i&1;
if(!ch[u][c])
ch[u][c]=++siz;
u=ch[u][c];
}
}
inline int query(int x) {
int u=0,res=0;
for(int i=31;~i;--i) {
int c=x>>i&1;
if(ch[u][!c]) {
u=ch[u][!c];
res=(res<<1)+(!c);
}
else {
u=ch[u][c];
res=(res<<1)+c;
}
}
return res;
}
}trie;
vector<pair<int,int> > edge[N];
int val[N];
int n,ans;
inline void dfs(int u,int sum) {
val[u]=sum;
for(int i=0,v,w;i<edge[u].size();++i) {
v=edge[u][i].first,w=edge[u][i].second;
dfs(v,sum^w);
}
}
signed main() {
scanf("%d",&n);
for(int i=1,u,v,w;i<n;++i) {
scanf("%d%d%d",&u,&v,&w);
edge[u].push_back({v,w});
}
dfs(1,0);
for(int i=1;i<=n;++i) {
trie.insert(val[i]);
ans=max(ans,val[i]^trie.query(val[i]));
}
printf("%d",ans);
return 0;
}