atcoder#ASAPORO2B. Many Swaps Sorting

Many Swaps Sorting

配点 : 900900

問題文

すぬけくんは (0,1,2,...,N1)(0,1,2, ...,N-1) を並び替えて得られるような数列 pp を持っています。 pp の (00-indexedでの) ii 番目の数は pip_i です。

すぬけくんは 1,2,...,N11,2,...,N-1 の番号がついた N1N-1 種類の操作を自由な順番で何度でも行うことができます。 kk 番の操作を行うと以下のソースコードで表されるような処理が実行されます。

for(int i=k;i<N;i++)
    swap(p[i],p[i-k]);

すぬけくんは操作を 00 回以上 10510^{5} 回以下行って pp を昇順に並び替えたいです。そのような操作手順の一例を示してください。 なお、この問題の制約下で、そのような操作手順が必ず存在することが証明できます。

制約

  • 2N2002 \leq N \leq 200
  • 0piN10 \leq p_i \leq N-1
  • pp(0,1,2,...,N1)(0,1,2,...,N-1) を並び替えて得られる

部分点

  • 300300 点分のデータセットでは N7N \leq 7 が成立する
  • 別の 400400 点分のデータセットでは N30N \leq 30 が成立する

入力

入力は以下の形式で標準入力から与えられる。

NN

p0p_0 p1p_1 ...... pN1p_{N-1}

出力

操作回数(これを mm とする)を 11 行目に出力せよ。 続く mm 行のうち ii 行目には ii 番目に実行する操作の番号を出力せよ。 mm10510^5 以下であり、mm 回の操作後にpp が昇順となっていれば正解となる。

5
4 2 0 1 3
4
2
3
1
2
  • 以下の図に各操作による pp の変化を示します。

9f3b51eb1fe742848f407bdeb7b772e1.png

9
1 0 4 3 5 6 2 8 7
11
3
6
1
3
5
2
4
7
8
6
3