#include<bits/stdc++.h>
using namespace std;
struct Trie{
int data;
int son[2]={};
};
vector<pair<int,int>> r[1000001];
Trie t[3000001];
int a[1000001];
int tot=0,size,n;
void dfs(int x){
for(int i=0;i<r[x].size();i++){
if(a[r[x][i].first]!=-1) continue;
a[r[x][i].first]=a[x]^r[x][i].second;
dfs(r[x][i].first);
}
size=max(size,a[x]);
}
void add(int x){
int p=0,s=0;
for(int i=(1<<size);i>0;i>>=1){
bool c=x&i;
if(t[p].son[c]==0)
t[p].son[c]=++tot;
s+=(x&i);
t[t[p].son[c]].data=s;
p=t[p].son[c];
}
}
int search(int x){
int p=0;
for(int i=(1<<size);i>0;i>>=1){
bool c=x&i;
if(t[p].son[!c]==0) p=t[p].son[c];
else p=t[p].son[!c];
}
return t[p].data^x;
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y,z;
cin>>x>>y>>z;
r[x].push_back(make_pair(y,z));
r[y].push_back(make_pair(x,z));
a[i]=-1;
}
a[1]=0;
dfs(1);
size=log2(size);
for(int i=1;i<=n;i++)
add(a[i]);
int ans,res;
for(int i=1;i<=n;i++)
res=max(res,search(a[i]));
cout<<res;
return 0;
}