""" 全方位木dpだよな dp[v] = 頂点v以下全てのパスについての現時点の総和 """ import sys from sys import stdin from collections import deque inf = float("inf") N = int(stdin.readline()) A = list(map(int,stdin.readline().split())) lis = [ [] for i in range(N) ] for i in range(N-1): u,v = map(int,stdin.readline().split()) u -= 1 v -= 1 lis[u].append(v) lis[v].append(u) dlis = [inf] * N dlis[0] = 0 q = deque([0]) visit = [] plis = [0] * N while q: v = q.popleft() visit.append(v) for nex in lis[v]: if dlis[nex] > dlis[v] + 1: dlis[nex] = dlis[v] + 1 plis[nex] = v q.append(nex) mod = 998244353 chsum = [0] * N chnum = [1] * N ans = 0 # dfs1 for v in reversed(visit): na = A[v] chsum[v] *= pow(10,len(str(na)),mod) chsum[v] += chnum[v] * na chsum[v] %= mod ans += chsum[v] ans %= mod if plis[v] != v: chsum[plis[v]] += chsum[v] chnum[plis[v]] += chnum[v] # dfs2 for v in visit[1:]: vp = plis[v] ap = A[vp] psum = chsum[plis[v]] # まず、自分のキヨを取り除く psum -= chsum[v] * pow(10,len(str(ap)),mod) psum -= chnum[v] * ap psum %= mod # 自分側に持ってきて、加算 na = A[v] psum *= pow(10,len(str(na)),mod) psum += (N-chnum[v]) * na ans += psum ans %= mod chsum[v] += psum chsum[v] %= mod print (ans % mod)