AT_agc050_f [AGC050F] NAND Tree

Description

[problemUrl]: https://atcoder.jp/contests/agc050/tasks/agc050_f 各頂点に $ 0 $ または $ 1 $ が書かれた木があります。 この木は $ N $ 個の頂点を持ち、それらには $ 1 $ から $ N $ までの番号が振られています。 各 $ i $ について、頂点 $ a_i $ と頂点 $ b_i $ を結ぶ辺が存在します。 頂点 $ i $ に書かれた数は $ c_i $ です。 すぬけ君は、この木に以下の操作を繰り返します。 - 辺を $ 1 $ 本選んで縮約し、消された $ 2 $ 個の頂点に書かれていた数の NAND を新たな頂点に書き込む。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_agc050_f/2832ee2906c66cb526c5b478a4fea0cd9ce9f087.png) $ N\ -\ 1 $ 回の操作後、木は $ 1 $ 個の頂点となります。 このような操作の行い方は $ (N-1)! $ 通りありますが、そのうち最後の頂点に $ 1 $ が書き込まれるものは何通りあるでしょうか。 この答えを **$ 2 $ で割った余り**を計算してください。

Input Format

入力は標準入力から以下の形式で与えられる。 > $ N $ $ a_1 $ $ b_1 $ $ : $ $ a_{N-1} $ $ b_{N-1} $ $ c_1 $ $ c_2 $ $ \cdots $ $ c_N $

Output Format

答えを出力せよ。

Explanation/Hint

### 注記 - 演算 NAND の定義は次の通りです: $ NAND(0,\ 0)\ =\ NAND(0,\ 1)\ =\ NAND(1,\ 0)\ =\ 1,\ NAND(1,\ 1)\ =\ 0 $. - 頂点 $ s $ と頂点 $ t $ を結ぶ辺を縮約する際は、その辺を取り除くと同時に $ 2 $ 頂点を併合します。 縮約後の木において、併合により生まれた頂点と頂点 $ u $ を結ぶ辺が存在するのは、縮約前の木において $ s $ と $ u $ を結ぶ辺または $ t $ と $ u $ を結ぶ辺が存在するときであり、またそのときに限られます。 ### 制約 - $ 2\ \leq\ N\ \leq\ 300 $ - $ 1\ \leq\ a_i\