#apc001h. [apc001_h]Generalized Insertion Sort

[apc001_h]Generalized Insertion Sort

题目描述

给定一个有根树,包含 NN 个顶点。顶点编号为 0,1,...,N10, 1, ..., N-1。根节点是顶点 00,顶点 ii (i=1,2,...,N1)(i = 1, 2, ..., N-1) 的父节点是顶点 pip_i

初始时,在顶点 ii 处写下整数 aia_i。其中,(a0,a1,...,aN1)(a_0, a_1, ..., a_{N-1})(0,1,...,N1)(0, 1, ..., N-1) 的一个排列。

你最多可以执行 25,00025,000 次以下操作,使得顶点 ii 处的值变为 ii

  • 选择一个顶点,并将其命名为 vv。考虑连接顶点 00vv 的路径。
  • 旋转路径上的值。也就是说,对于路径上的每条边 (i,pi)(i, p_i),用顶点 ii 处写下的值(在本操作之前)替换顶点 pip_i 处的值,并用顶点 00 处写下的值(在本操作之前)替换顶点 vv 处的值。
  • 可以选择顶点 00,此时操作不执行任何操作。

约束条件

  • 2N20002 \leq N \leq 2000
  • 0pii10 \leq p_i \leq i-1
  • (a0,a1,...,aN1)(a_0, a_1, ..., a_{N-1})(0,1,...,N1)(0, 1, ..., N-1) 的一个排列。

输入

从标准输入读入数据,数据格式如下:

NN p1p_1 p2p_2 ... pN1p_{N-1} a0a_0 a1a_1 ... aN1a_{N-1}

输出

在第一行打印操作的次数 QQ。在第二行到第 (Q+1)(Q+1) 行,按顺序打印所选择的顶点。


示例输入 1

5
0 1 2 3
2 4 0 1 3

示例输出 1

2
3
4
  • 第一次操作后,顶点 0,1,...,40, 1, ..., 4 处的值分别为 4,0,1,2,34, 0, 1, 2, 3

示例输入 2

5
0 1 2 2
4 3 1 2 0

示例输出 2

3
4
3
1
  • 第一次操作后,顶点 0,1,...,40, 1, ..., 4 处的值分别为 3,1,0,2,43, 1, 0, 2, 4
  • 第二次操作后,顶点 0,1,...,40, 1, ..., 4 处的值分别为 1,0,2,3,41, 0, 2, 3, 4