import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
private static class FastScanner {
while (st
== null || !st.
hasMoreTokens()) st
= new StringTokenizer(br.
readLine()); return st.nextToken();
}
}
private static List<int[]> build(int n) {
List<int[]> ops = new ArrayList<>();
int l = 1, r = n;
for (int row = 2; row <= n; row++) {
if ((row & 1) == 0) {
ops.add(new int[]{row, l, r});
++l;
} else {
ops.add(new int[]{row, l, r - 1});
ops.add(new int[]{row, l + 1, r});
--r;
}
}
return ops;
}
private static void output(List<int[]> ops, StringBuilder sb) {
sb.append(ops.size()).append('\n');
for (int[] o : ops) sb.append(o[0]).append(' ').append(o[1]).append(' ').append(o[2]).append('\n');
}
FastScanner fs = new FastScanner();
int t = fs.nextInt();
StringBuilder ans = new StringBuilder();
while (t-- > 0) {
int n = fs.nextInt();
List<int[]> ops = build(n);
output(ops, ans);
}
System.
out.
print(ans.
toString()); }
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CgogICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRmFzdFNjYW5uZXIgewogICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3Q7CiAgICAgICAgU3RyaW5nIG5leHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICAgICB3aGlsZSAoc3QgPT0gbnVsbCB8fCAhc3QuaGFzTW9yZVRva2VucygpKSBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSk7CiAgICAgICAgICAgIHJldHVybiBzdC5uZXh0VG9rZW4oKTsKICAgICAgICB9CiAgICAgICAgaW50IG5leHRJbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geyByZXR1cm4gSW50ZWdlci5wYXJzZUludChuZXh0KCkpOyB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxpbnRbXT4gYnVpbGQoaW50IG4pIHsKICAgICAgICBMaXN0PGludFtdPiBvcHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBpbnQgbCA9IDEsIHIgPSBuOwogICAgICAgIGZvciAoaW50IHJvdyA9IDI7IHJvdyA8PSBuOyByb3crKykgewogICAgICAgICAgICBpZiAoKHJvdyAmIDEpID09IDApIHsKICAgICAgICAgICAgICAgIG9wcy5hZGQobmV3IGludFtde3JvdywgbCwgcn0pOwogICAgICAgICAgICAgICAgKytsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb3BzLmFkZChuZXcgaW50W117cm93LCBsLCByIC0gMX0pOwogICAgICAgICAgICAgICAgb3BzLmFkZChuZXcgaW50W117cm93LCBsICsgMSwgcn0pOwogICAgICAgICAgICAgICAgLS1yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcHM7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvdXRwdXQoTGlzdDxpbnRbXT4gb3BzLCBTdHJpbmdCdWlsZGVyIHNiKSB7CiAgICAgICAgc2IuYXBwZW5kKG9wcy5zaXplKCkpLmFwcGVuZCgnXG4nKTsKICAgICAgICBmb3IgKGludFtdIG8gOiBvcHMpIHNiLmFwcGVuZChvWzBdKS5hcHBlbmQoJyAnKS5hcHBlbmQob1sxXSkuYXBwZW5kKCcgJykuYXBwZW5kKG9bMl0pLmFwcGVuZCgnXG4nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBGYXN0U2Nhbm5lciBmcyA9IG5ldyBGYXN0U2Nhbm5lcigpOwogICAgICAgIGludCB0ID0gZnMubmV4dEludCgpOwogICAgICAgIFN0cmluZ0J1aWxkZXIgYW5zID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICB3aGlsZSAodC0tID4gMCkgewogICAgICAgICAgICBpbnQgbiA9IGZzLm5leHRJbnQoKTsKICAgICAgICAgICAgTGlzdDxpbnRbXT4gb3BzID0gYnVpbGQobik7CiAgICAgICAgICAgIG91dHB1dChvcHMsIGFucyk7CiAgICAgICAgfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnQoYW5zLnRvU3RyaW5nKCkpOwogICAgfQp9Cg==