#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct edge
{
int to;
int nxt;
int val;
}E[100010];
int tot,head[100010];
void add_edge(int x,int y,int z)
{
tot++;
E[tot].val=z;
E[tot].nxt=head[x];
E[tot].to=y;
head[x]=tot;
}
int maxn=-1;
int sum[100010];
void dfs(int x,int from)
{
for(int i=head[x];i;i=E[i].nxt)
{
int to=E[i].to;
if(to==from) continue;
sum[to]=sum[x]^E[i].val;
dfs(to,x);
}
}
struct node
{
int ch[2];
}trie[2000010];
void insert(int x,int p)
{
for(int i=(1<<30);i>0;i>>=1)
{
bool c=x&i;
if(!trie[p].ch[c])
{
tot++;
trie[p].ch[c]=tot;
}
p=trie[p].ch[c];
}
}
int query(int x,int p)
{
int ans=0;
for(int i=(1<<30);i>0;i>>=1)
{
bool c=i&x;
if(trie[p].ch[!c])
{
ans+=i;
p=trie[p].ch[!c];
}
else
p=trie[p].ch[c];
}
return ans;
}
int n,x,y,z;
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,z);
add_edge(y,x,z);
}
tot=0;
dfs(1,1);
for(int i=1;i<=n;i++)
insert(sum[i],0);
for(int i=1;i<=n;i++)
maxn=max(maxn,query(sum[i],0));
printf("%d",maxn);
return 0;
}