#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
const int m = 1e5 + 5;
int a[m], ans[m], mprev[m], used[m];
int f(int n, int l, int h) {
  if (l == h) return l;
  long long c = (l + h + 1) / 2;
  if ((c * (c + 1)) / 2 <= n)
    return f(n, c, h);
  else
    return f(n, l, c - 1);
}
int g(int v, int l, int h) {
  if (l == h) {
    return l;
  }
  int c = (l + h) / 2;
  if (ans[c] == 0)
    return g(v, l, c);
  else if (ans[c] < v)
    return g(v, c + 1, h);
  else
    return g(v, l, c);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  int ml;
  cin >> t;
  while (t--) {
    int n, copy;
    cin >> n;
    copy = n;
    int k = f(n, 1, n);
    for (long long i = 0; i < n; i++) {
      cin >> a[i];
      used[i + 1] = 0;
    }
    bool b = false;
    int index = 0;
    vector<vector<int> > v;
    vector<vector<int> > v1(n);
    while (true) {
      for (long long i = 0; i < n; i++) ans[i] = 0, mprev[i + 1] = 0;
      for (long long i = 0; i < n; i++) {
        if (used[a[i]]) continue;
        if (ans[0] == 0 || a[i] < ans[0]) {
          ans[0] = a[i];
          v1[0].push_back(a[i]);
          continue;
        }
        int ko = g(a[i], 0, n - 1);
        ans[ko] = a[i];
        v1[ko].push_back(a[i]);
        mprev[a[i]] = ans[ko - 1];
      }
      for (long long i = n - 1; i >= 0; i--) {
        if (ans[i] != 0) {
          ml = i + 1;
          break;
        }
      }
      if (ml <= k) break;
      int ind = ans[ml - 1];
      v.push_back(vector<int>());
      while (ind != 0) {
        v[index].push_back(ind);
        used[ind] = 1;
        ind = mprev[ind];
      }
      index++;
      b = true;
      for (long long i = 0; i < n; i++)
        if (!used[i + 1]) {
          b = false;
          break;
        }
      if (b) break;
      k--;
      for (long long i = 0; i < n; i++) v1[i].clear();
    }
    int temp12 = index - 1;
    int si = v.size();
    if (!b) si += ml;
    cout << si << "\n";
    if (!b) {
      for (long long i = 0; i < ml; i++) {
        cout << v1[i].size() << " ";
        for (long long j = 0; j < v1[i].size(); j++) cout << v1[i][j] << " ";
        cout << "\n";
      }
    }
    for (long long i = 0; i < v.size(); i++) {
      cout << v[i].size() << " ";
      for (long long j = v[i].size() - 1; j >= 0; j--) cout << v[i][j] << " ";
      cout << "\n";
    }
  }
  return 0;
}
