#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e6+100;
int n,val[N],p[100];
int head[N],to[N],w[N],ne[N],tot;
void add(int x,int y,int z){
ne[++tot]=head[x];
to[tot]=y,w[tot]=z;
head[x]=tot;
}
void dfs(int u,int fa){
for(int i=head[u];i;i=ne[i]){
int v=to[i];
if(v==fa) continue;
val[v]=val[u]^w[i];
dfs(v,u);
}
}
struct tree{int ch[3];}rt[N];int cnt;
void build(){
for(int i=1;i<=n;i++){
int now=0;
for(int k=31;k>=0;k--){
long long x=(val[i]&p[k]?1:0);
if(!rt[now].ch[x]) rt[now].ch[x]=++cnt;
now=rt[now].ch[x];
}
}
}
signed main(){
cin>>n;
p[0]=1;
for(int i=31;i>=1;i--) p[i]=(1<<i);
for(int i=1;i<n;i++){
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
dfs(1,0);
build();
int ans=0;
for(int i=1;i<=n;i++){
int bb=0,now=0;
for(int k=31;k>=0;k--){
int x=val[i]&p[k];
if(rt[now].ch[!x]) bb+=p[k],now=rt[now].ch[!x];
else now=rt[now].ch[x];
}
ans=max(ans,bb);
}
// for(int i=1;i<=n;i++) cout<<val[i]<<' ';
cout<<ans;
}