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 <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
 
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef unsigned long long ull;
typedef long double ld; 
typedef tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update> pbds;

int a[222];
int n;

bool is_sorted()
{
	for(int i=0;i+1<n;i++)
	{
		if(a[i]>a[i+1]) return false;
	}
	return true;
}

vi moves;

void cyc()
{
	for(int i=1;i<n;i++) swap(a[i],a[i-1]); 
	moves.pb(1);
}

void swp()
{
	swap(a[0],a[n-1]); moves.pb(n-1);
}

int main()
{
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	while(!is_sorted())
	{
		vi swapid;
		for(int i=0;i+1<n;i++)
		{
			if(!swapid.empty()&&swapid.back()==i-1) continue;
			if(a[i]>a[i+1]) swapid.pb(i);
		}
		reverse(swapid.begin(),swapid.end());
		for(int i=0;i<n;i++)
		{
			cyc();
			if(!swapid.empty()&&swapid.back()==i) swp();
		}
	}
	cout<<moves.size()<<'\n';
	for(int v:moves) cout<<v<<'\n';
}