#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define per(i,r,l) for(int i=(r);i>=(l);--i)
#define sub(T,S) for(int T=(S-1)&S;T;T=(T-1)&S)
using namespace std;
const int maxn=1e5+10;
int n,a[maxn],d[maxn],chc[1<<15],dp[1<<15],ans,u,v,w,W;
int main(){
    scanf("%d",&n);
    rep(i,1,n-1) scanf("%d%d%d",&u,&v,&w),a[u+1]^=w,a[v+1]^=w;
    rep(i,1,n) ++d[a[i]];
    rep(i,1,15) ans+=d[i]>>1,W|=(d[i]&1)<<(i-1);
    rep(i,0,14) rep(S,0,(1<<15)-1) if(S&(1<<i)) chc[S]^=i+1,++dp[S];
    rep(S,1,(1<<15)-1){
        if(chc[S]) continue;--dp[S];
        sub(T,S) if(!chc[T]) dp[S]=min(dp[S],dp[T]+dp[S^T]);
    }
    printf("%d\n",dp[W]+ans);
    return 0;
}