#include<bits/stdc++.h> #define il inline using namespace std; const int N=100010; il int read(){ int f=1,w=0;char c=0; while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); } while(isdigit(c)) w=w*10+(c^48),c=getchar(); return f*w; } int n,dis[N],ch[10*N][2],tot,ans,cnt; int head[N],ver[2*N],edge[2*N],nex[2*N]; void add(int x,int y,int z){ ver[++tot]=y,edge[tot]=z,nex[tot]=head[x],head[x]=tot; } void dfs(int p,int f){ for(int i=head[p];i;i=nex[i]) { int y=ver[i],z=edge[i]; if(y==f) continue; dis[y]=(dis[p]^z); dfs(y,p); } } void build(int v){ int x=0; for(int i=31;i>=0;i--) { int a=(v&(1<<i))>>i; if(!ch[x][a]) ch[x][a]=++cnt; x=ch[x][a]; } } int query(int v){ int x=0,res=0; for(int i=31;i>=0;i--) { int a=(v&(1<<i))>>i; if(ch[x][!a]) res+=(1<<i),x=ch[x][!a]; else x=ch[x][a]; } return res; } int main(){ n=read(); for(int i=1;i<n;i++) { int x=read(),y=read(),z=read(); add(x,y,z);add(y,x,z); } dfs(1,0); for(int i=1;i<=n;i++) build(dis[i]); for(int i=1;i<=n;i++) ans=max(ans,query(dis[i])); cout<<ans<<endl; return 0; }