atcoder#APC001H. Generalized Insertion Sort

Generalized Insertion Sort

配点 : 20002000

問題文

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 を選んでもよいが、この場合はなにもしないという操作になる。

制約

  • 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}

出力

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

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