#include<bits/stdc++.h>
#define F(_i,_j,_k) for(int _i=_j;_i<=_k;_i++)
#define M 32768
using namespace std;
int n,d[100005],dp[M],nd,ans;
bool res[16];
int dfs(int i){
// cout<<i<<endl;
if(dp[i]!=0x3f3f3f3f)return dp[i];
if(i==0)return dp[0]=0;
F(j,0,14){
if((i>>j)%2==0)continue;
F(k,0,14){
if((i>>k)%2==0||j==k)continue;
int num=(j+1)^(k+1)-1,ret=i^(1<<j)^(1<<k)^(1<<num);
dp[i]=min(dp[i],dfs(ret)+((ret>>num)%2==0));
}
}
return dp[i]=dp[i]+1;
}
int main(){
cin>>n;
F(o,1,n-1){
int x,y,a;
cin>>x>>y>>a;
d[x]^=a;d[y]^=a;
}/*
F(i,0,n-1){
cout<<d[i]<<' ';
}
cout<<endl;*/
F(i,0,n-1){
if(d[i]==0)continue;
int rnd=nd;
nd^=(1<<d[i]-1);
if(nd<rnd)ans++;
}
memset(dp,0x3f,sizeof(dp));
ans+=dfs(nd);
cout<<ans<<endl;
return 0;
}