#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define nl '\n'
void fastio() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
}
void solve() {
int n; cin >> n;
vector<vector<int>>matrix(n+1,vector<int>(n+1));
vector<tuple<int,int,int>>ops;
for(int i =1;i<=n;i++){
for(int j = 1 ; j <= n ; j++){
matrix[i][j] =j;
}
}
for(int i = 1; i <= n; i++) {
// two reverse from 1 to i then from i+1 to n
reverse(matrix[i].begin() + 1, matrix[i].begin() + i );
reverse(matrix[i].begin() + i , matrix[i].begin() + 1 + n);
//if i ==1 this will not affect
if(i!=1) ops.push_back({i, 1, i});
// as if i == n if we do i+1 this will be out of boundaires
if(i+1 <n) ops.push_back({i, i+1, n});
}
cout << ops.size() << nl;
for(auto i : ops){
cout << get<0>(i) << " " << get<1>(i) << " " << get<2>(i) << nl;
}
// just for testing
// for(int i =1;i<=n;i++){
// for(int j =1;j<=n;j++){
// cout << matrix[i][j] << " ";
// }
// cout << nl;
// }
}
int main() {
fastio();
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbmwgJ1xuJwoKdm9pZCBmYXN0aW8oKSB7CiAgICBzdGQ6Omlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgc3RkOjpjaW4udGllKG51bGxwdHIpOwogICAgc3RkOjpjb3V0LnRpZShudWxscHRyKTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuOyBjaW4gPj4gbjsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj5tYXRyaXgobisxLHZlY3RvcjxpbnQ+KG4rMSkpOwogICAgdmVjdG9yPHR1cGxlPGludCxpbnQsaW50Pj5vcHM7CiAgICBmb3IoaW50IGkgPTE7aTw9bjtpKyspewogICAgICAgIGZvcihpbnQgaiA9IDEgOyBqIDw9IG4gOyBqKyspewogICAgICAgICAgICBtYXRyaXhbaV1bal0gPWo7CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgIAkvLyB0d28gcmV2ZXJzZSBmcm9tIDEgdG8gaSB0aGVuIGZyb20gaSsxIHRvIG4KICAgICAgICByZXZlcnNlKG1hdHJpeFtpXS5iZWdpbigpICsgMSwgbWF0cml4W2ldLmJlZ2luKCkgKyBpICk7ICAgICAgICAgCiAgICAgICAgcmV2ZXJzZShtYXRyaXhbaV0uYmVnaW4oKSArIGkgLCBtYXRyaXhbaV0uYmVnaW4oKSArIDEgKyBuKTsgICAgIAoJCQoJCS8vaWYgaSA9PTEgdGhpcyB3aWxsIG5vdCBhZmZlY3QgCiAgICAgICAgaWYoaSE9MSkgb3BzLnB1c2hfYmFjayh7aSwgMSwgaX0pOwogICAgICAgIAogICAgICAgIC8vIGFzIGlmIGkgPT0gbiBpZiB3ZSBkbyBpKzEgdGhpcyB3aWxsIGJlIG91dCBvZiBib3VuZGFpcmVzCiAgICAgICAgaWYoaSsxIDxuKSBvcHMucHVzaF9iYWNrKHtpLCBpKzEsIG59KTsKICAgIH0KCgogICAgY291dCA8PCBvcHMuc2l6ZSgpIDw8IG5sOwogICAgZm9yKGF1dG8gaSA6IG9wcyl7CiAgICAgICAgY291dCA8PCBnZXQ8MD4oaSkgPDwgIiAiIDw8IGdldDwxPihpKSA8PCAiICIgPDwgZ2V0PDI+KGkpIDw8IG5sOwogICAgfQoJCgkvLyBqdXN0IGZvciB0ZXN0aW5nIAogICAgLy8gZm9yKGludCBpID0xO2k8PW47aSsrKXsKICAgIC8vICAgICBmb3IoaW50IGogPTE7ajw9bjtqKyspewogICAgLy8gICAgICAgICBjb3V0IDw8IG1hdHJpeFtpXVtqXSA8PCAiICI7CiAgICAvLyAgICAgfQogICAgLy8gICAgIGNvdXQgPDwgbmw7CiAgICAvLyB9CgogICAgCn0KCmludCBtYWluKCkgewogICAgZmFzdGlvKCk7CiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pCiAgICAgICAgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==