#include<stdio.h>
#define N 100009
const int LOG = 1 << 30;
int head[N], cnt;
struct node
{
int v, w, nxt;
}e[N << 1];
inline void add(int u, int v, int w)
{
e[++ cnt].v = v, e[cnt].w = w, e[cnt].nxt = head[u], head[u] = cnt;
}
struct trie
{
int ch[N << 5][2], tot;
trie()
{
tot = 0;
}
inline void add(int x)
{
int u = 0;
for (int i = LOG;i;i >>= 1)
{
bool v = x & i;
if (!ch[u][v])
ch[u][v] = ++ tot;
u = ch[u][v];
}
}
inline int query(int x)
{
int u = 0, ret = 0;
for (int i = LOG;i;i >>= 1)
{
bool v = x & i;
if (ch[u][!v])
ret += i, u = ch[u][!v ^ 1];
else
u = ch[u][v];
}
return u;
}
}T;
int val[N];
void dfs(int u, int fa)
{
for (int i = head[u];i;i = e[i].nxt)
if (e[i].v != fa)
{
val[e[i].v] = val[u] ^ e[i].w;
dfs(e[i].v, u);
}
}
inline int max(int a, int b) {return a > b ? a : b;}
int main()
{
int n;
scanf("%d", &n);
int u, v, w;
for (int i = 1;i < n;++ i)
scanf("%d%d%d", &u, &v, &w), add(u, v, w), add(v, u, w);
dfs(1, 0);
for (int i = 1;i <= n;++ i)
T.add(val[i]);
int ans = -1e9;
for (int i = 1;i <= n;++ i)
ans = max(ans, T.query(val[i]));
printf("%d", ans);
return 0;
}