output_description: Print the answers for k = 1, 2, ..., N in order, each in its own line.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      c_1 c_2 ... c_N
      a_1 b_1
      :
      a_{N-1} b_{N-1}
attempt: import os
  from collections import Counter, defaultdict
  
  import sys
  
  if os.getenv("LOCAL"):
      sys.stdin = open("_in.txt", "r")
  
  sys.setrecursionlimit(10**9)
  INF = float("inf")
  IINF = 10**18
  MOD = 10**9 + 7
  # MOD = 998244353
  
  N = int(sys.stdin.buffer.readline())
  C = list(map(int, sys.stdin.buffer.readline().split()))
  AB = [list(map(int, sys.stdin.buffer.readline().split())) for _ in range(N - 1)]
  
  graph = [[] for _ in range(N)]
  for a, b in AB:
      a -= 1
      b -= 1
      graph[a].append(b)
      graph[b].append(a)
  
  color_counts = [defaultdict(int) for _ in range(N + 1)]
  for c in range(1, N + 1):
      color_counts[c][0] = N
  color_v_weights = [[] for _ in range(N + 1)]
  color_v = [0 for _ in range(N + 1)]
  color_v_next = [1 for _ in range(N + 1)]
  
  
  # color_parents = [[] for _ in range(N + 1)]
  # color_stack = [[] for _ in range(N + 1)]
  # children_counts = defaultdict(int)
  
  
  def dfs(v, p):
      color = C[v]
      color_v_prev = color_v[color]
  
      children_cv = []
      ret = 1
      for u in graph[v]:
          if u == p:
              continue
          cv = color_v_next[color]
          children_cv.append(cv)
          color_v[color] = cv
          color_v_next[color] += 1
          cnt = dfs(u, v)
          ret += cnt
          color_counts[color][cv] += cnt
      color_v[color] = color_v_prev
      color_counts[color][color_v_prev] -= ret
      return ret
  
  
  dfs(0, None)
  counter = Counter(C)
  
  for color, cc in enumerate(color_counts[1:], start=1):
      ans = N * (N - 1) // 2 + counter[color]
      for cnt in cc.values():
          ans -= cnt * (cnt - 1) // 2
      print(ans)
  
problem_description: Statement
  
  We have a tree with N vertices numbered 1 to N. The i-th edge in this tree
  connects Vertex a_i and b_i. Additionally, each vertex is painted in a color,
  and the color of Vertex i is c_i. Here, the color of each vertex is
  represented by an integer between 1 and N (inclusive). The same integer
  corresponds to the same color; different integers correspond to different
  colors.
  
  For each k=1, 2, ..., N, solve the following problem:
  
    * Find the number of simple paths that visit a vertex painted in the color k one or more times.
  
  **Note:** The simple paths from Vertex u to v and from v to u are not
  distinguished.
samples: [{"input": "3\n    1 2 1\n    1 2\n    2 3", "output": "5\n    4\n    0\n    \n\nLet P_{i,j} denote the simple path connecting Vertex i and j.\n\nThere are 5 simple paths that visit a vertex painted in the color 1 one or\nmore times:  \nP_{1,1}\\,,\\, P_{1,2}\\,,\\, P_{1,3}\\,,\\, P_{2,3}\\,,\\, P_{3,3}\n\nThere are 4 simple paths that visit a vertex painted in the color 2 one or\nmore times:  \nP_{1,2}\\,,\\, P_{1,3}\\,,\\, P_{2,2}\\,,\\, P_{2,3}\n\nThere are no simple paths that visit a vertex painted in the color 3 one or\nmore times.\n\n* * *"}, {"input": "1\n    1", "output": "1\n    \n\n* * *"}, {"input": "2\n    1 2\n    1 2", "output": "2\n    2\n    \n\n* * *"}, {"input": "5\n    1 2 3 4 5\n    1 2\n    2 3\n    3 4\n    3 5", "output": "5\n    8\n    10\n    5\n    5\n    \n\n* * *"}, {"input": "8\n    2 7 2 5 4 1 7 5\n    3 1\n    1 2\n    2 7\n    4 5\n    5 6\n    6 8\n    7 8", "output": "18\n    15\n    0\n    14\n    23\n    0\n    23\n    0"}]