#P16180. [Ncpc2019]Flow Finder水流还原

[Ncpc2019]Flow Finder水流还原

题目描述

去年夏天,制图师 Carla 代表 National Center for Positioning and Charting(NCPC)前往遥远的北方考察,目标是测量一套河流水系中的水流量。由于该地区十分偏远,而 Carla 又并不是很喜欢冒险,她只测量了其中一部分位置的水流量。

Carla 担心 NCPC 明年夏天又会派她回到那片荒野,于是她向算法专家,也就是你,求助:是否可以根据已有数据重建缺失的水流量?

这套河流水系用一棵有根树表示,树有 nn 个顶点,编号为 11nn。树的叶子是水源,其余顶点表示汇流处,即多条河流汇合的位置。水从编号较大的顶点流向编号较小的顶点。顶点 11 是树根,表示水系入海口。

每个水源的水流量可以是任意正整数;每个汇流处的水流量等于其所有子节点水流量之和。

现在给出这棵树,以及部分顶点的水流量。你的任务是求出所有顶点的水流量;如果无法唯一确定,或者给出的数据本身矛盾,则输出 impossible

输入格式

第一行包含一个整数 nn,表示树的顶点数。

2n31052 \le n \le 3\cdot 10^5

第二行包含 n1n-1 个整数 p2,p3,,pnp_2,p_3,\ldots,p_n,其中 pip_i 表示顶点 ii 的父节点编号。

1pi<i1 \le p_i < i

第三行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n,其中 aia_i 表示顶点 ii 的水流量。

  • 如果 ai=0a_i=0,表示该顶点水流量未知;
  • 如果 ai>0a_i>0,则 aia_i 就是该顶点已知的水流量。

已知值满足:

0ai1090 \le a_i \le 10^9

注意:未知值补出后可以大于 10910^9,只要求是正整数。

输出格式

如果所有 nn 个顶点的水流量都能唯一重建,按顶点编号从小到大输出这些水流量,每个数一行。

否则输出:

impossible

样例

输入 #1

10
1 2 3 2 1 6 7 7 6
0 4 2 2 0 5 0 2 0 2

输出 #1

9
4
2
2
2
5
3
2
1
2

输入 #2

5
1 2 2 1
4 0 0 0 1

输出 #2

impossible

输入 #3

4
1 1 1
3 2 1 0

输出 #3

impossible