#include<bits/stdc++.h>
using namespace std;
const int L=1e5+10;
#define int long long
struct edge{
int to,val;
};
vector<edge> e[L];
int n,sum[L],nxt[L*32][2],tot,ans;
inline void dfs(int u,int fa){
for(int i=0;i<e[u].size();i++){
int v=e[u][i].to;
if(v!=fa){
sum[v]=sum[u]^e[u][i].val;
dfs(v,u);
}
}
}
inline void add(int x){
int p=0;
for(int i=31;i>=0;i--){
int c=(x&((int)1<<i))?1:0;
if(!nxt[p][c])nxt[p][c]=++tot;
p=nxt[p][c];
}
}
inline int query(int x){
int bits=log2(x),p=0,ret=0;
for(int i=31;i>=0;i--){
int c=(x&((int)1<<i))?0:1;
if(nxt[p][c]){
ret+=1<<i;
p=nxt[p][c];
}else if(nxt[p][!c])p=nxt[p][c];
else return ret;
}
return ret;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<n;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
e[u].push_back((edge){v,w});
e[v].push_back((edge){u,w});
}
dfs(1,0);
for(int i=1;i<=n;i++)add(sum[i]);
for(int i=1;i<=n;i++)ans=max(ans,query(sum[i]));
printf("%lld",ans);
return 0;
}