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()