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"

using namespace std;

using ll = long long;
using ld = long double;
using P = pair<int, int>;
constexpr ld EPS = 1e-12;
constexpr int INF = numeric_limits<int>::max() / 2;
constexpr int MOD = 1e9 + 7;

template <typename T>
void printv(const vector<T> &v)
{
    int sz = v.size();
    for (int i = 0; i < sz; i++)
    {
        cerr << v[i] << " \n"[i == sz - 1];
    }
}

int n;
vector<int> p(200);
vector<int> ret;

void pswap()
{
    ret.push_back(n - 1);
    //cout << n - 1 << endl;
    swap(p[0], p[n - 1]);
}

void prot()
{
    ret.push_back(1);
    //cout << 1 << endl;
    int tmp = p[0];
    for (int i = 0; i < n - 1; i++)
    {
        p[i] = p[i + 1];
    }
    p[n - 1] = tmp;
}

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);

    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> p[i];
    }
    for (int i = n - 2; i >= 0; i--)
    {
        // i を i+1 の左に持ってくる
        int index0 = -1, index1 = -1;
        for (int j = 0; j < n; j++)
        {
            if (p[j] == i)
            {
                index0 = j;
            }
            if (p[j] == i + 1)
            {
                index1 = j;
            }
        }
        if ((index0 + 1) % n == index1)
        {
            continue;
        }
        while (p[n - 1] != i)
        {
            prot();
        }
        // printv(p);
        pswap();
        while (p[0] != i || p[1] != i + 1)
        {
            prot();
            pswap();
        }
    }
    while (p[0] != 0)
    {
        prot();
    }
    cout << ret.size() << endl;
    for (auto v : ret)
    {
        cout << v << endl;
    }
    // printv(p);
    return 0;
}