#include <bits/stdc++.h>
using namespace std;
int n;
int dec, BIT[100002], dp[100002];
int p[100002], P[100002], Norm[100002], pos[100002];
vector<int> V[100002];
void upd(int N, int p, int val) {
  for (int i = p; i <= N; i += (i & (-i))) BIT[i] = max(BIT[i], val);
}
int Max(int N, int val) {
  int ret = 0;
  for (int i = val; i > 0; i -= (i & (-i))) ret = max(ret, BIT[i]);
  return ret;
}
int cmp(const int a, const int b) { return p[a] < p[b]; }
int bs(int i, int n, int val) {
  int p2 = 1;
  --i;
  while (i + p2 < n) p2 <<= 1;
  while (p2) {
    if (i + p2 < n && V[i + p2].back() < val) i += p2;
    p2 >>= 1;
  }
  return i + 1;
}
void splitP(int &ans, int n) {
  int beg = ans + 1;
  V[++ans].push_back(p[1]);
  for (int i = 2; i <= n; ++i)
    if (V[ans].back() < p[i])
      V[++ans].push_back(p[i]);
    else {
      int j = bs(beg, ans, p[i]);
      V[j].push_back(p[i]);
    }
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) scanf("%d", &p[i]);
    int ans = -1;
    while (n > 0) {
      int m = 0, len = 0;
      for (int i = 1; i <= n; ++i) {
        pos[i] = i;
        BIT[i] = 0;
      }
      sort(pos + 1, pos + n + 1, cmp);
      for (int i = 1; i <= n; ++i) Norm[pos[i]] = i;
      for (int i = 1; i <= n; ++i) {
        P[i] = p[i];
        dp[i] = Max(n, Norm[i]) + 1;
        upd(n, Norm[i], dp[i]);
        if (dp[i] > len) len = dp[i];
      }
      if (1LL * len * (len + 1) <= 2 * n) {
        splitP(ans, n);
        n = 0;
        continue;
      }
      V[++ans].resize(len);
      m = n - len;
      int N = m, prv = 100002;
      for (int i = n; i >= 1; --i)
        if (len > 0 && dp[i] == len && P[i] < prv) {
          --len;
          V[ans][len] = P[i];
          prv = P[i];
        } else
          p[m--] = P[i];
      n = N;
    }
    ++ans;
    printf("%d", ans);
    for (int i = 0; i < ans; ++i) {
      printf("\n%d ", V[i].size());
      for (int val : V[i]) printf("%d ", val);
      V[i].clear();
    }
    printf("\n");
  }
  return 0;
}
