AT_asaporo2_b Many Swaps Sorting

题目描述

Snuke 拥有一个由 $(0, 1, 2, \ldots, N-1)$ 重排而成的序列 $p$,这个序列的第 $i$ 个元素为 $p_i$(下标从 $0$ 开始)。 现在,Snuke 可以无限次地使用 $N-1$ 种不同的操作,这些操作分别标记为 $1, 2, \ldots, N-1$。每当执行第 $k$ 种操作时,会执行如下代码: ```cpp for(int i = k; i < N; i++) swap(p[i], p[i-k]); ``` Snuke 想通过最多 $10^5$ 次的操作,使序列 $p$ 按从小到大的顺序排列。请为 Snuke 提供一个可能的操作序列。题目保证在给定条件下,总能找到这样的操作序列。

输入格式

输入由以下格式组成: > $N$ $p_0$ $p_1$ $\ldots$ $p_{N-1}$

输出格式

首先输出一个整数 $m$,表示操作次数($m \leq 10^5$)。接下来的 $m$ 行中,每行输出一个整数,表示每次操作的编号。最终经过这些操作后,序列 $p$ 必须按升序排好。

说明/提示

### 约束条件 - $2 \leq N \leq 200$ - $0 \leq p_i \leq N-1$ - 序列 $p$ 是 $(0, 1, 2, \ldots, N-1)$ 的某种排列 ### 部分分数 - 在某些数据集(300 分)中,$N \leq 7$ - 在另一些数据集(400 分)中,$N \leq 30$ ### 样例解释 - 下图展示了每次操作后序列 $p$ 的变化: ![](https://atcoder.jp/img/asaporo2/9f3b51eb1fe742848f407bdeb7b772e1.png) **本翻译由 AI 自动生成**