#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn = 1e5 + 5;
const int maxm = 2e5 + 5;
struct Trie {
int tot, cnt, ans;
int ch[maxn * 40][2];
int sum[maxn * 4];
int b[33];
int head[maxn];
struct Edge {
int val, to, next;
}edge[maxn * 4];
void init() {
tot = cnt = ans = 0;
memset(head, -1,sizeof(head));
memset(ch, 0,sizeof(ch));
memset(sum, 0,sizeof(sum));
}
void add(int u, int v, int w) {
cnt++;
edge[cnt].val = w;
edge[cnt].to = v;
edge[cnt].next = head[u];
head[u] = cnt;
}
void dfs(int u,int p,int wei) {
sum[u] = wei;
for(int i = head[u]; ~i; i = edge[i].next) {
int v = edge[i].to, w = edge[i].val;
if(v != p) {
dfs(v, u, sum[u] ^ w);
}
}
}
void insert(int val) {
int now = 0;
for(int i = 0;i <= 31;i++) b[i] = (val >> i) & 1;
for(int i = 31; ~i; i--) {
if(!ch[now][b[i]]) ch[now][b[i]] = ++tot;
now = ch[now][b[i]];
}
}
void find(int val) {
int now = 0, tmp = 0;
for(int i = 0;i <= 32;i++) b[i] = (val >> i) & 1;
for(int i = 31; ~i; i--) {
if(ch[now][b[i] ^ 1])
now = ch[now][b[i] ^ 1],
tmp += (1 << i);
else
now = ch[now][b[i]];
}
ans = max(ans, tmp);
}
int solve(int n) {
init();
for(int i = 2, u, v, w;i <= n;i++) {
scanf("%d%d%d",&u,&v,&w);
add(u, v, w), add(v, u, w);
}
dfs(0, 0 ,0);
for(int i = 0;i < n; i++) insert(sum[i]);
for(int i = 0;i < n; i++) find(sum[i]);
return ans;
}
}Te;
int main() {
int n;
while(~scanf("%d",&n)) {
printf("%d\n",Te.solve(n));
}
return 0;
}