Problem:
Score : 900 points

Problem Statement

Snuke has a sequence p, which is a permutation of (0,1,2, ...,N-1).
The i-th element (0-indexed) in p is p_i.

He can perform N-1 kinds of operations labeled 1,2,...,N-1 any number of times in any order.
When the operation labeled k is executed, the procedure represented by the following code will be performed:

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

He would like to sort p in increasing order using between 0 and 10^{5} operations (inclusive).
Show one such sequence of operations.
It can be proved that there always exists such a sequence of operations under the constraints in this problem.

Constraints

2 \leq N \leq 200

0 \leq p_i \leq N-1

p is a permutation of (0,1,2,...,N-1).

Partial Scores

In the test set worth 300 points, N \leq 7.

In the test set worth another 400 points, N \leq 30.

Input

Input is given from Standard Input in the following format:

N
p_0 p_1 ... p_{N-1}

Output

Let m be the number of operations in your solution. In the first line, print m.
In the i-th of the following m lines, print the label of the i-th executed operation.
The solution will be accepted if m is at most 10^5 and p is in increasing order after the execution of the m operations.

Sample Input 1

5
4 2 0 1 3

Sample Output 1

4
2
3
1
2

Each operation changes p as shown below:

Sample Input 2

9
1 0 4 3 5 6 2 8 7

Sample Output 2

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

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <random>
using namespace std;

int main() {
        int n;
        scanf("%d", &n);
        vector<int> p(n);
        for (int i = 0; i < n; i ++) scanf("%d", &p[i]);
        int cnt = 0;
        vector<int> ans;
        srand(time(NULL));
        for (;;) {
                cnt ++;
                if (cnt > 100000) break;
                int k = rand() % (n - 1);
                k ++;
                ans.push_back(k);
                for (int i = k; i < n; i ++) {
                        swap(p[i], p[i - k]);
                }
                bool ok = true;
                for (int i = 0; i < n; i ++) {
                        ok &= p[i] == i;
                }
                if (ok) { 
                        //for (auto it : p) cerr << it << ' ';
                        //cerr << endl;
                        break;
                }
        }
        if (cnt == 100001) return !printf("(._.)\n");
        printf("%d\n", (int) ans.size());
        for (int i = 0; i < ans.size(); i ++) printf("%d\n", ans[i]);
        return 0;
}