#include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   const long long INF = 4e18 + 10;   long long n;   long long a[55];   vector<vector<long long> > ans;   long long findpos(long long x) {     for (long long i = 0; i < n; i++)       if (a[i] == x) return i;   }   void p1(long long x) {     long long xx = findpos(x);     vector<long long> v;     if (xx > 0) v.push_back(xx);     if (n - x + 1 - xx > 0) v.push_back(n - x + 1 - xx);     for (long long i = n - x + 1; i < n; i++) v.push_back(1);     ans.push_back(v);     long long b[n];     long long i = 0;     for (i = 0; i < x - 1; i++) b[i] = i + 1;     for (long long j = xx; j <= n - x; j++) {       b[i] = a[j];       i++;     }     for (long long j = 0; j < xx; j++) {       b[i] = a[j];       i++;     }     for (long long j = 0; j < n; j++) {       a[j] = b[j];     }   }   void p2(long long x) {     long long xx = findpos(x);     vector<long long> v;     for (long long i = 0; i < x - 1; i++) v.push_back(1);     if (xx + 1 - x + 1 > 0) v.push_back(xx + 1 - x + 1);     if (n - 1 - xx > 0) v.push_back(n - 1 - xx);     ans.push_back(v);     long long b[n];     long long i = 0;     for (long long j = xx + 1; j < n; j++) {       b[i] = a[j];       i++;     }     for (long long j = x - 1; j <= xx; j++) {       b[i] = a[j];       i++;     }     for (long long j = 0; j < x - 1; j++) {       b[i] = j + 1;       i++;     }     for (long long j = 0; j < n; j++) {       a[j] = b[j];     }   }   signed main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     ;     cout << fixed << setprecision(10);     long long t = 1;     while (t--) {       cin >> n;       for (long long i = 0; i < n; i++) cin >> a[i];       long long x = findpos(1);       if (n % 2 == 1) {         if (x == 0) {         } else {           vector<long long> v;           v.push_back(x);           v.push_back(n - x);           ans.push_back(v);           long long b[n];           long long i = 0;           for (long long j = x; j < n; j++) {             b[i] = a[j];             i++;           }           for (long long j = 0; j < x; j++) {             b[i] = a[j];             i++;           }           for (long long j = 0; j < n; j++) {             a[j] = b[j];           }         }         for (long long i = 2; i <= n; i++) {           if (i % 2 == 1)             p1(i);           else             p2(i);         }       } else {         if (x == n - 1) {         } else {           vector<long long> v;           v.push_back(x + 1);           v.push_back(n - x - 1);           ans.push_back(v);           long long b[n];           long long i = 0;           for (long long j = x + 1; j < n; j++) {             b[i] = a[j];             i++;           }           for (long long j = 0; j <= x; j++) {             b[i] = a[j];             i++;           }           for (long long j = 0; j < n; j++) {             a[j] = b[j];           }         }         for (long long i = 2; i <= n; i++) {           if (i % 2 == 1)             p2(i);           else             p1(i);         }       }       cout << ans.size() << endl;       for (long long i = 0; i < ans.size(); i++) {         cout << ans[i].size() <<    ;         for (long long j = 0; j < ans[i].size(); j++) {           cout << ans[i][j] <<    ;         }         cout << endl;       }     }     return 0;   }