import sys from collections import deque MOD = 998244353 def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr +=1 Q = list(map(int, input[ptr:ptr+N])) ptr += N edges = [[] for _ in range(N+1)] for _ in range(N-1): u = int(input[ptr]) v = int(input[ptr+1]) ptr +=2 edges[u].append(v) edges[v].append(u) # Precompute inverse of squares up to N max_k = N inv_sq = [1] * (max_k + 2) for k in range(1, max_k+2): inv_sq[k] = pow(k, 2, MOD) inv_sq[k] = pow(inv_sq[k], MOD-2, MOD) # Precompute k0 = (N!)^2 mod MOD fact = 1 for i in range(1, N+1): fact = fact * i % MOD k0 = fact * fact % MOD # For each p, compute sum of Q_i / (d+1)^2 result = [] for p in range(1, N+1): visited = [False]*(N+1) q = deque() q.append( (p, 0) ) visited[p] = True total = 0 while q: u, d = q.popleft() total = (total + Q[u-1] * inv_sq[d+1]) % MOD for v in edges[u]: if not visited[v]: visited[v] = True q.append( (v, d+1) ) res = total * k0 % MOD result.append(res) print('\n'.join(map(str, result))) if __name__ == '__main__': main()