#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 1e5 + 10;
vector<vector<int>> ans[N];
void dfs(int n)
{
if (n == 0 || n == 1) return;
int temp = floor(log2(n));
int up = (1 << (temp + 1)) - 1;
if (up != n)
{
if (ans[up - n - 1].empty()) dfs(up - n - 1);
ans[n] = ans[up - n - 1];
}
for (int i = n; i > up / 2; i--)
ans[n].push_back({i, up - i});
}
int main()
{
int t;
cin >> t;
ans[0].push_back({0});
ans[1].push_back({0, 1});
while (t--)
{
int n;
cin >> n;
dfs(n);
cout << ans[n].size() << '\n';
for (auto it : ans[n])
{
cout << it.size() << " ";
for (auto it1 : it) cout << it1 << " ";
cout << '\n';
}
}
return 0;
}