#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
void solve() {
int n;
cin >> n;
vector<int> p(n);
int curr = n - 1;
// Work backwards from the largest index
while (curr >= 0) {
// Find the smallest perfect square >= curr
int root = ceil(sqrt(curr));
int s = root * root;
// The start of the block that sums to 's'
int start = s - curr;
// Fill the block in reverse
for (int i = start; i <= curr; ++i) {
p[i] = s - i;
}
// Move to the remaining prefix
curr = start - 1;
}
for (int i = 0; i < n; ++i) {
cout << p[i] << (i == n - 1 ? "" : " ");
}
cout << "\n";
}
int main() {
// Fast I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICAKICAgIHZlY3RvcjxpbnQ+IHAobik7CiAgICBpbnQgY3VyciA9IG4gLSAxOwogICAgCiAgICAvLyBXb3JrIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXJnZXN0IGluZGV4CiAgICB3aGlsZSAoY3VyciA+PSAwKSB7CiAgICAgICAgLy8gRmluZCB0aGUgc21hbGxlc3QgcGVyZmVjdCBzcXVhcmUgPj0gY3VycgogICAgICAgIGludCByb290ID0gY2VpbChzcXJ0KGN1cnIpKTsKICAgICAgICBpbnQgcyA9IHJvb3QgKiByb290OwogICAgICAgIAogICAgICAgIC8vIFRoZSBzdGFydCBvZiB0aGUgYmxvY2sgdGhhdCBzdW1zIHRvICdzJwogICAgICAgIGludCBzdGFydCA9IHMgLSBjdXJyOwogICAgICAgIAogICAgICAgIC8vIEZpbGwgdGhlIGJsb2NrIGluIHJldmVyc2UKICAgICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPD0gY3VycjsgKytpKSB7CiAgICAgICAgICAgIHBbaV0gPSBzIC0gaTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gTW92ZSB0byB0aGUgcmVtYWluaW5nIHByZWZpeAogICAgICAgIGN1cnIgPSBzdGFydCAtIDE7CiAgICB9CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY291dCA8PCBwW2ldIDw8IChpID09IG4gLSAxID8gIiIgOiAiICIpOwogICAgfQogICAgY291dCA8PCAiXG4iOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIEZhc3QgSS9PCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=