#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,cnt[20],ok[1<<17],dp[1<<17],val[N];
typedef pair<int,int> pii;
vector<pii> e[N];
void dfs(int x,int fa){
	for (auto i:e[x]){
		int v=i.first;
		if (v==fa) continue;
		val[v]=i.second;
		val[x]^=val[v];
		dfs(v,x);
	}
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<n;i++){
		int u,v,l;
		scanf("%d%d%d",&u,&v,&l);u++;v++;
		e[u].push_back(pii(v,l));
		e[v].push_back(pii(u,l));
	}
	dfs(1,0);
	for (int i=2;i<=n;i++) cnt[val[i]]++;
	int ans=0;
	for (int i=1;i<=15;i++) ans+=cnt[i]/2,cnt[i]%=2;
	for (int i=1;i<=15;i++) ans+=cnt[i];
	cnt[0]=0;
	int U=1<<16;
	for (int i=0;i<U;i++){
		int s=0;
		for (int j=0;j<16;j++)
		if (i>>j&1) s^=j;
		if (!s) ok[i]=1;
	}
	for (int i=0;i<U;i++)
	for (int j=i;j;j=(j-1)&i){
		if (ok[j]) dp[i]=max(dp[i],dp[i^j]+1);
		dp[i]=max(dp[i],dp[i^j]);
	}
	int tmp=0;
	for (int i=0;i<16;i++) tmp^=cnt[i]<<i;
	printf("%d\n",ans-dp[tmp]);
	return 0;
}
