魔法树
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

祝愿参加这赛季ICPC/CCPC的你我均能取得理想成绩,魔法树祝你好运~
长途有一棵魔法树,树中包含 n 个点,编号为1~n,其中每一个结点都富含能量值。
现在大魔术师长途要开始施展魔法啦!他要砍掉树的任意多条边(可能0条,可能1条,可能更多)。当各个连通块中的能量值总和奇偶性都相同(即均为奇数或者均为偶数)时,魔法树会发生神秘反应,彻底释放出它的能量!
连通块的定义:若结点p_1能通过某些树边到达结点p_2,结点p_2能通过某些树边到达结点p_1,则称p_1p_2处在同一个连通块当中
请问大魔法师长途有多少种方案使得魔法树能释放能量呢?
由于答案可能很大,你只需要输出答案对998244353取模后的值即可
两种方案不同,当且仅当至少存在一条树边在一种方案中被砍,在另一种方案中没被砍

输入描述:

第一行一个整数\ n\ (1 \leq n \le 10^5),表示魔法树的结点数量
第二行输出n个整数,其中第i个数表示第i号点的能量值为\ w_i\ (1\le w_i\le 10^9)
接下来n-1行,每行包含两个整数a_ib_i (1\le a_i < b_i\le n),表示结点a_ib_i存在一条边
输入保证一定是一棵树

输出描述:

输出一个整数,表示大魔法师长途使得魔法树能释放能量的方案数。由于答案可能很大,你只需要输出答案对998244353取模后的值
示例1

输入

复制
3
1 2 1
1 2
1 3

输出

复制
3

说明

有以下三种情况各个连通块的奇偶性相同
示例2

输入

复制
3
1 1 1
1 2
1 3

输出

复制
2