题目描述
对于任意长度为 n 的序列 a,可以基于 a 建立一个广义线段树。广义线段树是一个有 (2n−1) 个节点的带权二叉树,对于每个编号为 p 的节点,都有两个属性 Lp 和 Rp,表示其维护的区间为 [Lp,Rp],同时其权值 Mp=∏i=LpRpai 。另外,广义线段树还满足如下性质:
- 所有编号为 p∈[n,2n−1] 的节点是叶节点,同时 Lp=Rp=p+1−n。
- 所有编号为 p∈[1,n−1] 的节点是非叶节点,其必定有左儿子 Xp 和右儿子 Yp,且 p<Xp<Yp。节点 p 维护的区间为左右儿子维护区间之并,且保证维护区间连续。形式化地,有 RXp=LYp−1,且 Lp=LXp,Rp=RYp。
例如,下面是一个基于 n=4 的序列 a={1,2,3,4} 建立的广义线段树(节点内整数对 (p,Mp) 分别表示编号和权值)。可以发现,广义线段树的形态并不唯一。
对这个广义线段树而言:
- [L7,R7]=[4,4],故 M7=a4
- [L6,R6]=[3,3],故 M6=a3
- [L5,R5]=[2,2],故 M5=a2
- [L4,R4]=[1,1],故 M4=a1
- [L3,R3]=[L4,R5]=[1,2],故 M3=a1×a2
- [L2,R2]=[L3,R6]=[1,3],故 M2=a1×a2×a3
- [L1,R1]=[L2,R7]=[1,4],故 M1=a1×a2×a3×a4
分别给定长度为 n 的序列 a,b 以及节点数为 (2n−1) 的广义线段树 T 的形态(即每个节点的左右儿子编号),然后你需要执行 n 次操作,第 i 次操作为将 ai 变成 ai×bi。
每次操作结束后,你需要基于修改后的序列 a 建立与 T 形态相同的广义线段树,并求出所有节点的权值和,即 ∑i=12n−1Mi。由于结果可能会非常大,你只需要求出其对 998244353 取模后的值。
输入格式
第一行包含一个整数 n (1≤n≤5⋅105),表示序列 a 和 b 的长度。
第二行包含 n 个整数,其中第 i 个整数定义为 ai (1≤ai<998244353)。
第三行包含 n 个整数,其中第 i 个整数定义为 bi (1≤bi<998244353)。
接下来 n−1 行,其中第 i 行包含两个整数 Xi,Yi (i<Xi<Yi≤2n−1),分别表示节点 i 的左右儿子编号。保证输入的广义线段树形态符合题目要求。
输出格式
输出一行用空格间隔的 n 个整数,其中第 i 个整数表示第 i 次修改后的答案对 998244353 取模后的值。
4
1 2 3 4
2 3 2 3
2 7
3 6
4 5
75 207 390 974
提示
样例中广义线段树的形态和题面中的例子相同。
第一次修改后,a1 变为 a1×b1=1×2=2,因而新的 a={2,2,3,4}。可以计算出:
- M7=a4=4
- M6=a3=3
- M5=a2=2
- M4=a1=2
- M3=a1×a2=2×2=4
- $M_2 = a_1 \times a_2 \times a_3 = 2 \times 2 \times 3 = 12$
- $M_1 = a_1 \times a_2 \times a_3 \times a_4 = 2 \times 2 \times 3 \times 4 = 48$
故权值之和为 M1+M2+…+M7=75。
第二次修改后,a2 变为 a2×b2=2×3=6。后续的操作与第一次操作类似,此处不再赘述。