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 (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>

int N, *p, ans[100000], l = 0;

void swaps(int k){
	int i, tmp;
	for(i = k; i < N; i++){
		tmp = p[i];
		p[i] = p[i - k];
		p[i - k] = tmp;
	}
	ans[l] = k;
	l++;
}

void out(){
	int i;
	printf("p:");
	for(i = 0; i < N; i++){
		printf("%d ", p[i]);
	}
	printf("\n");
}

int main(){
	int i;
	scanf("%d", &N);
	p = (int *)malloc(sizeof(int) * N);
	for(i = 0; i < N; i++){
		scanf("%d", &p[i]);
//		p[i] = (N / 2 - i + N) % N;
	}
	for(i = N - 2; i >= 0; i--){
//		printf("i = %d\n", i);
		while(p[0] != i){
			swaps(1);
//			out();
		}
		while(p[1] != i + 1){
			swaps(1);
			swaps(N - 1);
//			out();
		}
	}
//	out();
	printf("%d\n", l);
	for(i = 0; i < l; i++){
		printf("%d\n", ans[i]);
	}
	return 0;
}