func_code_string: #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;       }     }   }   