G - Fusion Editorial /

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 1600

問題文

1 から N までの番号のついた N 頂点からなる木 T があります. i 番目の辺は頂点 A_iB_i を結んでいます. また,各頂点には整数が書かれており,頂点 i に書かれている整数は V_i です.

あなたは今から以下の操作を N-1 回行います.

  • T の辺を 1 つ選び,縮約する. 縮約前の 2 つの頂点に書かれていた整数を x,y とおき,縮約後の頂点には x \times y+1 を書き込む.

操作を行う方法は (N-1)! 通りあります. 全ての方法について,最終的に残る 1 頂点に書かれた値を求めたとします. これら (N-1)! 個の値の総和を 998244353 で割った余りを求めてください.

辺の縮約とは

グラフ G について,辺 (u,v) を縮約する操作とは,頂点 u,v1 つの頂点にまとめる操作です. より正確には,縮約とは G を以下のように変化させる操作です.

  • G から辺 (u,v) および頂点 u,v を削除し,新しい頂点 (これを w と呼ぶ) を追加する.
  • u に接続する各辺 (u,x) を削除し,変わりに辺 (w,x) を追加する.
  • v に接続する各辺 (v,x) を削除し,変わりに辺 (w,x) を追加する.

制約

  • 1 \leq N \leq 5000
  • 1 \leq V_i < 998244353
  • 1 \leq A_i,B_i \leq N
  • 入力されるグラフは木.
  • 入力される値はすべて整数.

入力

入力は以下の形式で標準入力から与えられる.

N
V_1 V_2 \cdots V_N
A_1 B_1
A_2 B_2
\vdots
A_{N-1} B_{N-1}

出力

答えを出力せよ.


入力例 1

3
1 2 3
1 2
3 2

出力例 1

18

操作を行う方法は以下の 2 通りあります.

  • 最初の操作で辺 (1,2) を選んだ場合,縮約後の頂点には 1 \times 2+1=3 が書き込まれます. 次の操作では,縮約によってできた頂点と頂点 3 を縮約します. すると,3 \times 3+1=10 が書かれた頂点が残ります.
  • 最初の操作で辺 (3,2) を選んだ場合,縮約後の頂点には 3 \times 2+1=7 が書き込まれます. 次の操作では,縮約によってできた頂点と頂点 1 を縮約します. すると,7 \times 1+1=8 が書かれた頂点が残ります.

よって求める答えは 10+8=18 です.


入力例 2

5
1 1 1 1 1
2 1
3 1
4 1
5 3

出力例 2

136

入力例 3

8
3 1 4 1 5 9 2 6
2 1
3 2
4 1
5 2
6 5
7 3
8 7

出力例 3

54388564

入力例 4

20
785439575 250040586 709423541 945005786 19237226 404191280 250876593 22672564 519729087 344065187 273714213 560047126 139793597 542901248 520999410 855572558 498896933 418633758 742973826 248730679
12 9
19 18
9 5
6 20
8 16
3 6
4 14
6 12
16 12
3 17
14 19
15 16
17 13
11 14
17 2
9 7
18 10
19 3
1 18

出力例 4

768399804