Problem: 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).

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.

Examples

Input

5
4 2 0 1 3


Output

4
2
3
1
2


Input

9
1 0 4 3 5 6 2 8 7


Output

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

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
template<class S,class T> ostream& operator<<(ostream& o,const pair<S,T> &p){return o<<"("<<p.fs<<","<<p.sc<<")";}
template<class T> ostream& operator<<(ostream& o,const vector<T> &vc){o<<"sz = "<<vc.size()<<endl<<"[";for(const T& v:vc) o<<v<<",";o<<"]";return o;}
int N;
int p[200];

vector<int> ans;
void proceed(int k){
	ans.pb(k);
	for(int i=k;i<N;i++) swap(p[i],p[i-k]);
}

void Swap(int i,int j){
	rep(k,i+1) proceed(1);
	proceed(N-1);
	rep(k,N-(i+1)) proceed(1);
}
int main(){
	cin>>N;
	rep(i,N) cin>>p[i];
	rep(t,20){
		int k = rand()%(N-1)+1;
		proceed(k);
	}
	rep(i,N-1) rep(j,N-1) if(p[j+1]<p[j]){
		Swap(j,j+1);
	}
	vector<int> nans;
	int cnt1 = 0;
	for(int v:ans){
		if(v==1){
			cnt1++;
			if(cnt1==N) cnt1 = 0;
		}else{
			rep(t,cnt1) nans.pb(1);
			nans.pb(v);
			cnt1 = 0;
		}
	}
	rep(t,cnt1) nans.pb(1);
	ans = nans;
	cout<<ans.size()<<endl;
	for(int v:ans) cout<<v<<endl;

//	rep(i,N) show(p[i]);
}