配点 : 2000 点
問題文
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 となるようにしてください。
- 頂点を 1 個選び v とする。頂点 0 と頂点 v の間のパスを考える。
- パス上の頂点の値を回転させる。つまり、パス上の各辺 (i,pi) について、頂点 pi に書かれた値を頂点 i に(この操作の直前に)書かれていた値に書き換え、頂点 v の値は頂点 0 に(この操作の直前に)書かれていた値に書き換える。
- なお、頂点 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
出力
1 行目に操作の回数 Q を出力せよ。
2 行目から Q+1 行目には、操作で選んだ頂点を順に出力せよ。
5
0 1 2 3
2 4 0 1 3
2
3
4
- 1 回目の操作後、頂点 0,1,..,4 に書かれた値は 4,0,1,2,3 となる
5
0 1 2 2
4 3 1 2 0
3
4
3
1
- 1 回目の操作後、頂点 0,1,..,4 に書かれた値は 3,1,0,2,4 となる
- 2 回目の操作後、頂点 0,1,..,4 に書かれた値は 1,0,2,3,4 となる