编程题
### 问题描述
小蓝有一棵包含 $n$ 个节点的树。他希望对这棵树上的每个节点进行染色,每个节点可以被染成黑色或白色。然而,他有一个特殊的要求,除叶子节点外,对于第 $i$ 个节点至少要有 $k_i$ 个黑色的子节点。
小蓝想知道,满足这个要求的染色方法有多少种。请你帮助他解决这个问题,由于答案可能很大,请对 $998244353$ 取模。
### 输入格式
第一行输入一个整数 $n$,表示树的节点个数。
接下来一行,输入 $n$ 个整数 $k_i$,代表每个节点最小的黑色节点数量。
接下来 $n-1$ 行每行输入两个整数 $v_i,u_i$,代表 $v_i$ 有一条边指向 $u_i$。
### 输出格式
输出一个整数,代表可以染色的方案。答案对 $998244353$ 取模。
### 样例输入
```
3
1 0 0
1 2
1 3
```
### 样例输出
```
6
```
### 说明
我们用 $0$ 表示白色,$1$ 代表黑色。
那么方案如下 $6$ 种:$\lbrace 0,1,0\rbrace,\lbrace 0,1,1\rbrace,\lbrace 0,0,1\rbrace,\lbrace 1,1,0\rbrace,\lbrace 1,1,1\rbrace,\lbrace 1,0,1\rbrace$。
### 评测数据范围
$0 \le k_i \le n, 1 \le n \le 10^5$。
保证 $k_i$ 小于等于 $i$ 的子节点数量。