#include <bits/stdc++.h>
using namespace std;
int T, n, tot, t1, t2, top;
vector<int> h[100005];
set<int> e;
int s[100005], tree[100005][2], f[100005], la[100005], flag[100005], st[100005];
void find(int x) {
  while (x > 0) {
    if (tree[x][0] > t1) t1 = tree[x][0], t2 = tree[x][1];
    x -= x & -x;
  }
}
void adt(int a, int b, int c) {
  while (a <= n) {
    if (tree[a][0] < b) tree[a][0] = b, tree[a][1] = c;
    a += a & -a;
  }
}
void get_lis() {
  for (int i = 1; i <= n; i++) tree[i][0] = tree[i][1] = 0, la[i] = 0, f[i] = 0;
  for (int i = 1; i <= n; i++) {
    if (flag[i]) continue;
    t1 = 0;
    t2 = 0;
    find(s[i]);
    f[i] = t1 + 1;
    la[i] = t2;
    adt(s[i], f[i], i);
  }
}
void add(int a) {
  top = 0;
  while (a != 0) {
    flag[a] = 1;
    st[++top] = a;
    a = la[a];
  }
  tot++;
  for (int i = top; i >= 1; i--) h[tot].push_back(s[st[i]]);
}
void work() {
  e.clear();
  for (int i = 1; i <= n; i++) {
    if (flag[i]) continue;
    set<int>::iterator it = e.lower_bound(s[i]);
    if (it == e.end()) {
      tot++;
      h[tot].push_back(s[i]);
      e.insert(s[i]);
      la[s[i]] = tot;
    } else {
      int tmp = la[*it];
      h[tmp].push_back(s[i]);
      e.erase(*it);
      e.insert(s[i]);
      la[s[i]] = tmp;
    }
  }
}
int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) scanf("%d", &s[i]);
    int mb = 1;
    while (mb * (mb + 1) / 2 < n) mb++;
    for (int i = 1; i <= n; i++) f[i] = 1, la[i] = 0, flag[i] = 0;
    for (int i = 1; i <= tot; i++) h[i].clear();
    tot = 0;
    while (1) {
      get_lis();
      int mx = 0, id = 0;
      for (int i = 1; i <= n; i++)
        if (mx < f[i] && !flag[i]) mx = f[i], id = i;
      if (mx >= mb && mx >= 1)
        add(id), mb--;
      else
        break;
    }
    work();
    printf("%d\n", tot);
    for (int i = 1; i <= tot; i++) {
      printf("%d ", h[i].size());
      for (int j = 0; j < h[i].size() - 1; j++) printf("%d ", h[i][j]);
      printf("%d\n", h[i][h[i].size() - 1]);
    }
  }
  return 0;
}
