AT_apc001_h Generalized Insertion Sort

Description

[problemUrl]: https://atcoder.jp/contests/apc001/tasks/apc001_h $ N $ 頂点の根つき木が与えられます。 頂点には番号 $ 0,\ 1,\ ...,\ N-1 $ がついており、根は頂点 $ 0 $ です。 そして、頂点 $ i(i\ =\ 1,\ 2,\ ...,\ N-1) $ の親は頂点 $ p_i $ です。 はじめ、頂点 $ i $ には整数 $ a_i $ が書かれています。 なお、$ (a_0,\ a_1,\ ...,\ a_{N-1}) $ は $ (0,\ 1,\ ...,\ N-1) $ の順列になっています。 あなたは以下の操作を $ 25,000 $ 回まで好きな回数実行できます。頂点 $ i $ に書かれた値が $ i $ となるようにしてください。 - 頂点を $ 1 $ 個選び $ v $ とする。頂点 $ 0 $ と頂点 $ v $ の間のパスを考える。 - パス上の頂点の値を回転させる。つまり、パス上の各辺 $ (i,\ p_i) $ について、頂点 $ p_i $ に書かれた値を頂点 $ i $ に(この操作の直前に)書かれていた値に書き換え、頂点 $ v $ の値は頂点 $ 0 $ に(この操作の直前に)書かれていた値に書き換える。 - なお、頂点 $ 0 $ を選んでもよいが、この場合はなにもしないという操作になる。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ p_1 $ $ p_2 $ ... $ p_{N-1} $ $ a_0 $ $ a_1 $ ... $ a_{N-1} $

Output Format

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

Explanation/Hint

### 制約 - $ 2\ \leq\ N\ \leq\ 2000 $ - $ 0\ \leq\ p_i\ \leq\ i-1 $ - $ (a_0,\ a_1,\ ...,\ a_{N-1}) $ は $ (0,\ 1,\ ...,\ N-1) $ の順列である ### Sample Explanation 1 \- $ 1 $ 回目の操作後、頂点 $ 0,\ 1,\ ..,\ 4 $ に書かれた値は $ 4,\ 0,\ 1,\ 2,\ 3 $ となる ### Sample Explanation 2 \- $ 1 $ 回目の操作後、頂点 $ 0,\ 1,\ ..,\ 4 $ に書かれた値は $ 3,\ 1,\ 0,\ 2,\ 4 $ となる - $ 2 $ 回目の操作後、頂点 $ 0,\ 1,\ ..,\ 4 $ に書かれた値は $ 1,\ 0,\ 2,\ 3,\ 4 $ となる