output_description: Find the minimum number of operations required to achieve the objective.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      x_1 y_1 a_1
      x_2 y_2 a_2
      :
      x_{N-1} y_{N-1} a_{N-1}
attempt: from collections import Counter
  from functools import reduce
  from itertools import combinations
  from operator import xor
  
  n = int(input())
  nodes = [0] * n
  for _ in range(n - 1):
      x, y, a = map(int, input().split())
      nodes[x] ^= a
      nodes[y] ^= a
  
  c = Counter(nodes)
  del c[0]
  ans = 0
  remains = set()
  for i, v in c.items():
      ans += v // 2
      if v % 2:
          remains.add(i)
  
  for r in (3, 4, 5):
      while len(remains) < r * 2:
          for ns in combinations(remains, r):
              if reduce(xor, ns) == 0:
                  remains.difference_update(ns)
                  ans += r - 1
                  break
          else:
              break
  print(ans)
  
problem_description: Statement
  
  You are given a tree with N vertices. The vertices are numbered 0 through N-1,
  and the edges are numbered 1 through N-1. Edge i connects Vertex x_i and y_i,
  and has a value a_i. You can perform the following operation any number of
  times:
  
    * Choose a simple path and a non-negative integer x, then for each edge e that belongs to the path, change a_e by executing a_e ← a_e ⊕ x (⊕ denotes XOR).
  
  Your objective is to have a_e = 0 for all edges e. Find the minimum number of
  operations required to achieve it.
samples: [{"input": "5\n    0 1 1\n    0 2 3\n    0 3 6\n    3 4 4", "output": "3\n    \n\nThe objective can be achieved in three operations, as follows:\n\n  * First, choose the path connecting Vertex 1, 2, and x = 1.\n  * Then, choose the path connecting Vertex 2, 3, and x = 2.\n  * Lastly, choose the path connecting Vertex 0, 4, and x = 4.\n\n* * *"}, {"input": "2\n    1 0 0", "output": "0"}]