题目描述
给定一棵有 N 个顶点的有根树。顶点编号为 0, 1, …, N−1,根为顶点 0。顶点 i(i=1, 2, …, N−1)的父节点为 pi。
初始时,每个顶点 i 上写有一个整数 ai。(a0, a1, …, aN−1) 是 0 到 N−1 的一个排列。
你可以最多进行 25000 次如下操作,从而使得每个顶点 i 上的值变为 i。
- 选择一个顶点 v。考虑从顶点 0 到顶点 v 的路径。
- 将这条路径上的顶点的值循环右移。也就是说,对于路径上的每一条边 (i,pi),将顶点 pi 上的值写到顶点 i 上,并将原来顶点 0 上的值写到顶点 v 上。
- 你也可以选择顶点 0,但在这种情况下,这个操作什么也不做。
输入格式
输入从标准输入读入,格式如下:
N p1 p2 ... pN−1 a0 a1 ... aN−1
输出格式
第一行输出操作次数 Q。
接下来的 Q 行,每行输出一次操作中选择的顶点编号。
输入输出样例 #1
输入 #1
5
0 1 2 3
2 4 0 1 3
输出 #1
2
3
4
输入输出样例 #2
输入 #2
5
0 1 2 2
4 3 1 2 0
输出 #2
3
4
3
1
说明/提示
约束条件
- 2≤N≤2000
- 0≤pi≤i−1
- (a0, a1, …, aN−1) 是 0 到 N−1 的一个排列
样例说明 1
- 第 1 次操作后,顶点 0, 1, …, 4 上的值分别变为 4, 0, 1, 2, 3。
样例说明 2
- 第 1 次操作后,顶点 0, 1, …, 4 上的值分别变为 3, 1, 0, 2, 4。
- 第 2 次操作后,顶点 0, 1, …, 4 上的值分别变为 1, 0, 2, 3, 4。