题目描述
给定一个有根树,包含 N 个顶点。顶点编号为 0,1,...,N−1。根节点是顶点 0,顶点 i (i=1,2,...,N−1) 的父节点是顶点 pi。
初始时,在顶点 i 处写下整数 ai。其中,(a0,a1,...,aN−1) 是 (0,1,...,N−1) 的一个排列。
你最多可以执行 25,000 次以下操作,使得顶点 i 处的值变为 i。
- 选择一个顶点,并将其命名为 v。考虑连接顶点 0 和 v 的路径。
- 旋转路径上的值。也就是说,对于路径上的每条边 (i,pi),用顶点 i 处写下的值(在本操作之前)替换顶点 pi 处的值,并用顶点 0 处写下的值(在本操作之前)替换顶点 v 处的值。
- 可以选择顶点 0,此时操作不执行任何操作。
约束条件
- 2≤N≤2000
- 0≤pi≤i−1
- (a0,a1,...,aN−1) 是 (0,1,...,N−1) 的一个排列。
输入
从标准输入读入数据,数据格式如下:
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
- 第一次操作后,顶点 0,1,...,4 处的值分别为 4,0,1,2,3。
示例输入 2
5
0 1 2 2
4 3 1 2 0
示例输出 2
3
4
3
1
- 第一次操作后,顶点 0,1,...,4 处的值分别为 3,1,0,2,4。
- 第二次操作后,顶点 0,1,...,4 处的值分别为 1,0,2,3,4。