#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000000 + 7;
const int N = 100000 + 50;
vector<int> a;
int val[N];
int p[N];
int rp[N];
int avl[N];
pair<int, int> dp[N];
int curn;
pair<int, int> bit[N];
vector<vector<int> > fa;
void clear_bit(int n) {
  for (int i = 0; i < n + 2; i++) {
    bit[i] = {0, -1};
  }
}
void upd(int i, int x, int y) {
  while (i < curn) {
    if (x > bit[i].first) {
      bit[i] = {x, y};
    }
    i += i & (-i);
  }
}
pair<int, int> get(int i) {
  pair<int, int> ans = {0, 0};
  while (i > 0) {
    if (bit[i].first > ans.first) {
      ans = bit[i];
    }
    i -= i & (-i);
  }
  return ans;
}
void build() {
  int n = a.size();
  if (n == 0) return;
  clear_bit(n + 3);
  curn = n + 2;
  pair<int, int> vl = {0, 0};
  for (int i = 1; i <= n; i++) {
    avl[i] = 1;
    auto an = get(a[i - 1]);
    dp[i] = {an.first + 1, an.second};
    if (dp[i].first > vl.first) {
      vl = {dp[i].first, i};
    }
    upd(a[i - 1], dp[i].first, i);
  }
  if (val[n - vl.first] < val[n]) {
    vector<int> ans;
    int cur = vl.second;
    while (cur > 0) {
      avl[a[cur - 1]] = 0;
      ans.push_back(p[a[cur - 1]]);
      cur = dp[cur].second;
    }
    reverse(ans.begin(), ans.end());
    fa.push_back(ans);
    int c = 0;
    for (int i = 1; i <= n; i++) {
      c += avl[i];
      if (avl[i] == 1) {
        p[c] = p[i];
        rp[i] = c;
      }
    }
    vector<int> temp;
    for (int i = 1; i <= n; i++) {
      if (avl[a[i - 1]]) {
        temp.push_back(rp[a[i - 1]]);
      }
    }
    a = temp;
    build();
    return;
  } else {
    vector<int> v[n + 5];
    for (int i = 1; i <= n; i++) {
      v[dp[i].first].push_back(p[a[i - 1]]);
    }
    for (int i = 0; i <= n; i++) {
      if (v[i].size()) fa.push_back(v[i]);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int cur = 2;
  for (int i = 1; i < N; i++) {
    for (int j = 0; j < cur && i + j < N; j++) {
      val[i + j] = cur - 1;
    }
    i += cur - 1;
    cur++;
  }
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    a.clear();
    for (int i = 1; i <= n; i++) {
      p[i] = i;
      int x;
      cin >> x;
      a.push_back(x);
    }
    fa.clear();
    build();
    cout << fa.size() << endl;
    for (auto& it : fa) {
      cout << it.size() << " ";
      for (auto it1 : it) cout << it1 << " ";
      cout << endl;
    }
  }
}
