#include <bits/stdc++.h>
using namespace std;
void solve() {
  int n;
  cin >> n;
  vector<int> A(n), B(n);
  for (int i = 0; i < n; i++) {
    cin >> A[i];
  }
  if (n == 1) {
    cout << "0\n";
    return;
  }
  int cnt = 0;
  vector<vector<int>> op(n);
  if (A[n - 1] != n) {
    for (int i = 0; i < n; i++) {
      if (A[i] == n) {
        op[cnt].push_back(i + 1);
        op[cnt].push_back(n - i - 1);
        for (int j = i + 1; j < n; j++) B[j - i - 1] = A[j];
        for (int j = 0; j <= i; j++) B[n - i - 1 + j] = A[j];
        swap(A, B);
        cnt++;
        break;
      }
    }
  }
  for (int i = n - 1; i >= 2; i--) {
    if (A[n - 1] == n) {
      if (A[0] == i) {
        op[cnt].push_back(i);
        for (int j = 0; j < n - i; j++) op[cnt].push_back(1);
        for (int j = n - 1; j >= i; j--) B[n - 1 - j] = A[j];
        for (int j = 0; j < i; j++) B[n - i + j] = A[j];
        swap(A, B);
        cnt++;
      } else {
        for (int j = 1; j < n; j++) {
          if (A[j] == i) {
            op[cnt].push_back(j);
            op[cnt].push_back(i - j);
            for (int k = 0; k < n - i; k++) op[cnt].push_back(1);
            for (int k = n - 1; k >= i; k--) B[n - 1 - k] = A[k];
            for (int k = j; k < i; k++) B[n - i + k - j] = A[k];
            for (int k = 0; k < j; k++) B[n - j + k] = A[k];
            swap(A, B);
            cnt++;
            break;
          }
        }
      }
    } else {
      if (A[n - 1] == i) {
        for (int j = 0; j < n - i; j++) op[cnt].push_back(1);
        op[cnt].push_back(i);
        for (int j = n - i; j < n; j++) B[j - n + i] = A[j];
        for (int j = n - i - 1; j >= 0; j--) B[n - 1 - j] = A[j];
        swap(A, B);
        cnt++;
      } else {
        for (int j = 0; j < n; j++) {
          if (A[j] == i) {
            for (int k = 0; k < n - i; k++) op[cnt].push_back(1);
            op[cnt].push_back(j + 1 - n + i);
            op[cnt].push_back(n - j - 1);
            for (int k = j + 1; k < n; k++) B[k - j - 1] = A[k];
            for (int k = n - i; k <= j; k++) B[-1 - j + k + i] = A[k];
            for (int k = n - i - 1; k >= 0; k--) B[n - 1 - k] = A[k];
            swap(A, B);
            cnt++;
            break;
          }
        }
      }
    }
  }
  if (A[0] == n) {
    int i = 1;
    if (A[n - 1] == i) {
      for (int j = 0; j < n - i; j++) op[cnt].push_back(1);
      op[cnt].push_back(i);
      for (int j = n - i; j < n; j++) B[j - n + i] = A[j];
      for (int j = n - i - 1; j >= 0; j--) B[n - 1 - j] = A[j];
      swap(A, B);
      cnt++;
    } else {
      for (int j = 0; j < n; j++) {
        if (A[j] == i) {
          for (int k = 0; k < n - i; k++) op[cnt].push_back(1);
          op[cnt].push_back(j + 1 - n + i);
          op[cnt].push_back(n - j - 1);
          for (int k = j + 1; k < n; k++) B[k - j - 1] = A[k];
          for (int k = n - i; k <= j; k++) B[-1 - j + k + i] = A[k];
          for (int k = n - i - 1; k >= 0; k--) B[n - 1 - k] = A[k];
          swap(A, B);
          cnt++;
          break;
        }
      }
    }
  }
  cout << cnt << '\n';
  for (int i = 0; i < cnt; i++) {
    cout << op[i].size();
    for (int x : op[i]) cout << ' ' << x;
    cout << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  int T = 1;
  while (T--) {
    solve();
  }
  return 0;
}
