#apc001h. [apc001_h]Generalized Insertion Sort

[apc001_h]Generalized Insertion Sort

問題文

NN 頂点の根つき木が与えられます。 頂点には番号 0,1,...,N10, 1, ..., N-1 がついており、根は頂点 00 です。 そして、頂点 i(i=1,2,...,N1)i(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 となるようにしてください。

  • 頂点を 11 個選び vv とする。頂点 00 と頂点 vv の間のパスを考える。
  • パス上の頂点の値を回転させる。つまり、パス上の各辺 (i,pi)(i, p_i) について、頂点 pip_i に書かれた値を頂点 ii に(この操作の直前に)書かれていた値に書き換え、頂点 vv の値は頂点 00 に(この操作の直前に)書かれていた値に書き換える。
  • なお、頂点 00 を選んでもよいが、この場合はなにもしないという操作になる。

制約

  • 2leqNleq20002 \\leq N \\leq 2000
  • 0leqpileqi10 \\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}

出力

11 行目に操作の回数 QQ を出力せよ。 22 行目から Q+1Q+1 行目には、操作で選んだ頂点を順に出力せよ。


入力例 1

5
0 1 2 3
2 4 0 1 3

出力例 1

2
3
4
  • 11 回目の操作後、頂点 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
  • 11 回目の操作後、頂点 0,1,..,40, 1, .., 4 に書かれた値は 3,1,0,2,43, 1, 0, 2, 4 となる
  • 22 回目の操作後、頂点 0,1,..,40, 1, .., 4 に書かれた値は 1,0,2,3,41, 0, 2, 3, 4 となる