#include<bits/stdc++.h>
#define end ed
using namespace std;
const int M=1e6+5;
int n,m,op,x,y,z,t;
int dis[M],a[M];
int ed;
int l,r,lca,ans;
int fa[M],son[M];
int h[M],cnt;
struct edge{int h,t,x,nxt;}e[M<<1];
void add(int x,int y,int z){e[++cnt]={x,y,z,h[x]};h[x]=cnt;}
int tr[M<<6][2],num,v[M<<6];
void insert(int x,int id,int p=0){
for(int i=30;i>=0;i--){
int y=(x>>(i-1))&1;
if(!tr[p][y])tr[p][y]=++num;
p=tr[p][y];
}
v[p]=id;
}
void clear(int p=0){
if(tr[p][0])clear(tr[p][0]),tr[p][0]=0,v[p]=0;
if(tr[p][1])clear(tr[p][1]),tr[p][1]=0,v[p]=0;
}
void get(int x,int id,int p=0){
int sum=0;
for(int i=30;i>=0;i--){
int y=(x>>(i-1))&1;
if(tr[p][y^1])sum+=(1<<(i-1)),p=tr[p][y^1];
else p=tr[p][y];
}
if(sum>=ans)ans=sum,l=id,r=v[p];
}
void MAX(int x,int fx){
insert(dis[x],x);
get(dis[x],x);
for(int i=h[x];i;i=e[i].nxt){
int y=e[i].t;
if(y==fx)continue;
MAX(y,x);
}
}
int read(){
int ans=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){ans=(ans<<3)+(ans<<1)+(ch^48);ch=getchar();}
return ans*w;
}
void dfs(int x,int fx,int sum){
dis[x]=sum;
for(int i=h[x];i;i=e[i].nxt){
int y=e[i].t;
if(y==fx)continue;
dfs(y,x,sum^e[i].x);
}
}
void DFS(int x,int fx){
fa[x]=fx;
for(int i=h[x];i;i=e[i].nxt){
int y=e[i].t;
if(y==fx)continue;
DFS(y,x);
}
}
void write(int x){
if(x>=10)write(x/10);
putchar(x%10+48);
}
void sol(int x,int y){
int lx=l,rx=r;
son[y]=0,fa[x]=0;
while(y!=x){
son[fa[y]]=y;
y=fa[y];
}
while(y){
for(int i=h[y];i;i=e[i].nxt){
int z=e[i].t;
if(z==fa[y]||z==son[y])continue;
clear();
num=0;
ans=0;
MAX(z,y);
end=max(end,ans+op);
}
y=son[y];
}
clear(),ans=0,num=0;
y=rx;
MAX(y,fa[y]);
a[y]=ans,y=fa[y];
while(y!=lx){
insert(dis[y],y);
for(int i=h[y];i;i=e[i].nxt){
int z=e[i].t;
if(z==fa[y]||z==son[y])continue;
MAX(z,y);
}
get(dis[y],y);
a[y]=ans;
y=fa[y];
}
clear(),num=0,ans=0;
y=son[lx];
MAX(lx,son[lx]);
while(y){
end=max(end,a[y]+ans);
for(int i=h[y];i;i=e[i].nxt){
int z=e[i].t;
if(z==fa[y]||z==son[y])continue;
MAX(z,y);
}
insert(dis[y],y);
get(dis[y],y);
y=son[y];
}
}
signed main(){
n=read();
clear();cnt=0;end=0;num=0;
for(int i=1;i<=n;i++)h[i]=0;
for(int i=1;i<n;i++){
x=read(),y=read(),z=read();
add(x,y,z),add(y,x,z);
}
dfs(1,0,0);
ans=l=r=0;
MAX(1,0);
op=ans;
DFS(l,0);
sol(l,r);
write(end);
putchar('\n');
return 0;
}