#include <bits/stdc++.h>
using namespace std;
void IO() {
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
int main() {
  IO();
  long long int n;
  cin >> n;
  vector<long long int> arr(n);
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n))) {
    cin >> arr[i];
  }
  vector<long long int> quantity(n, 1);
  long long int cp = 0;
  vector<vector<int> > ans;
  do {
    vector<long long int> brr;
    vector<long long int> nquant;
    n = (int)(arr.size());
    long long int prev = arr[0];
    set<int> put;
    put.insert(prev);
    long long int sum = quantity[0];
    for (__typeof(n) i = (1) - ((1) > (n)); i != (n) - ((1) > (n));
         i += 1 - 2 * ((1) > (n))) {
      long long int diff = arr[i] - prev;
      if (diff == 1) {
        put.insert(arr[i]);
        sum += quantity[i];
      } else {
        auto it = put.begin();
        brr.push_back(*it);
        nquant.push_back(sum);
        sum = quantity[i];
        put.clear();
        put.insert(arr[i]);
      }
      prev = arr[i];
    }
    auto it = put.begin();
    brr.push_back(*it);
    nquant.push_back(sum);
    vector<long long int> temp = brr;
    sort(temp.begin(), temp.end());
    map<long long int, long long int> seq;
    long long int cnt = 1;
    for (auto it : temp) {
      seq[it] = cnt;
      cnt++;
    }
    for (auto &it : brr) {
      it = seq[it];
    }
    arr = brr;
    quantity = nquant;
    if ((int)(arr.size()) > 1) {
      n = (int)(arr.size());
      long long int l = 0, r = 0;
      for (__typeof(n - 1) i = (0) - ((0) > (n - 1));
           i != (n - 1) - ((0) > (n - 1)); i += 1 - 2 * ((0) > (n - 1))) {
        for (__typeof(n) j = (i + 1) - ((i + 1) > (n));
             j != (n) - ((i + 1) > (n)); j += 1 - 2 * ((i + 1) > (n))) {
          long long int diff = arr[i] - arr[j];
          if (diff == 1) {
            l = i, r = j;
            break;
          }
        }
        if (r > l) break;
      }
      vector<int> res;
      vector<long long int> temp;
      vector<long long int> newQ;
      int cnt = 0;
      for (int i = r + 1; i <= n - 1; i++) {
        temp.push_back(arr[i]);
        newQ.push_back(quantity[i]);
        cnt += quantity[i];
      }
      if (cnt) res.push_back(cnt);
      temp.push_back(arr[r]);
      newQ.push_back(quantity[r]);
      res.push_back(quantity[r]);
      cnt = 0;
      for (int i = l; i <= r - 1; i++) {
        temp.push_back(arr[i]);
        newQ.push_back(quantity[i]);
        cnt += quantity[i];
      }
      if (cnt) res.push_back(cnt);
      cnt = 0;
      for (int i = 0; i <= l - 1; i++) {
        temp.push_back(arr[i]);
        newQ.push_back(quantity[i]);
        cnt += quantity[i];
      }
      if (cnt) res.push_back(cnt);
      reverse(res.begin(), res.end());
      arr = temp;
      quantity = newQ;
      ans.push_back(res);
    }
  } while ((int)(arr.size()) > 1);
  cout << (int)(ans.size()) << "\n";
  for (auto it : ans) {
    cout << (int)(it.size()) << " ";
    for (auto ti : it) cout << ti << " ";
    cout << "\n";
  }
  return 0;
}
