#asaporo2b. [asaporo2_b]Many Swaps Sorting

[asaporo2_b]Many Swaps Sorting

问题陈述

Snuke有一个序列pp,它是(0,1,2,...,N1)(0,1,2, ...,N-1)的一个排列。pp的第ii个元素(索引为00)是pip_i

他可以执行N1N-1种操作,标号为1,2,...,N11,2,...,N-1,可以任意次数以任意顺序执行。当执行标号为kk的操作时,将执行以下代码:

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

他想要使用0010510^{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。在第一行中,输出mm。在接下来的mm行中,分别输出第ii个执行操作的标号。如果mm不超过10510^5且在执行这mm次操作后pp变为升序,则接受该解法。

样例输入 1

5
4 2 0 1 3

样例输出 1

4
2
3
1
2

每个操作将pp修改如下:

9f3b51eb1fe742848f407bdeb7b772e1.png

样例输入 2

9
1 0 4 3 5 6 2 8 7

样例输出 2

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