#include <bits/stdc++.h>
#include<iostream>
#include<stdio.h>
using namespace std;
#define int long long
#define ii pair<int, int>
#define F first
#define S second
#define all(X) (X).begin(), (X).end()
#define mutter ios_base::sync_with_stdio(0), cin.tie(0)
int rc = 1;//docukcvidkjvckdjcdc
//dkbc vjvhcjsvsvmcskjvcskzjcsnsmcjs,zmc zx
signed main()
{
mutter;//sdjbsdhvcsmvsksv
//sdkjvbdlsvslkjvlskjvs
cin >> rc;
vector<int> sqrs;//finding the squares sgcgcgasckhcksjhcc
for (int i = 0; i <= 2e5; i++)
sqrs.push_back(i * i);//kjdb JHV jd vjd vjV JD
while (rc--)//tedtduwecdjvwhkvhnvcskjcv
//skjcsjk cks cnscnms cmsnc s cms
{
int o;//KJDBChvhjvdhJDVCHnvhjvKJH
cin >> o;
vector<int> a(o), b(o);
for (int i = 0; i < o; i++)
a[i] = i;//hjvdhvsfvhdshshvksjhsjhvsk
b = a;//cvjhcvhcvJCJHCVhmc nnx n jn
int id = o - 1;//testcases
while (id >= 0)//ping the dirt
{
int cure = a[id];
int actual_num = *lower_bound(all(sqrs), a[id]);
//sdvsdhvsdvjhvsnvcvnsvcjsmsmnvcsnvsnm,s,s
int dist = actual_num - cure;
reverse(b.begin() + dist, b.begin() + cure + 1);
//skjvbsvdjhsdjmsnscnbnbvs,nvcsnvcvsm
id = dist - 1;
}
for (auto x : b)//akbcavskcjHCjNXCVXHNCNXCxnc,xcnxzncvcmn
//akcjhCJVCJVKCJ,jcjchDCJD
cout << x << ' ';
cout << endl;//out the code valudssz
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxzdGRpby5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIGFsbChYKSAoWCkuYmVnaW4oKSwgKFgpLmVuZCgpCiNkZWZpbmUgbXV0dGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCkKCmludCByYyA9IDE7Ly9kb2N1a2N2aWRranZja2RqY2RjCi8vZGtiYyB2anZoY2pzdnN2bWNza2p2Y3Nrempjc25zbWNqcyx6bWMgengKCnNpZ25lZCBtYWluKCkKewogICAgbXV0dGVyOy8vc2RqYnNkaHZjc212c2tzdgogICAgLy9zZGtqdmJkbHN2c2xranZsc2tqdnMKICAgIGNpbiA+PiByYzsKICAgIHZlY3RvcjxpbnQ+IHNxcnM7Ly9maW5kaW5nIHRoZSBzcXVhcmVzICBzZ2NnY2dhc2NraGNrc2poY2MKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDJlNTsgaSsrKQogICAgICAgIHNxcnMucHVzaF9iYWNrKGkgKiBpKTsvL2tqZGIgSkhWIGpkIHZqZCB2alYgSkQKCiAgICB3aGlsZSAocmMtLSkvL3RlZHRkdXdlY2Rqdndoa3ZobnZjc2tqY3YKICAgIC8vc2tqY3NqayBja3MgY25zY25tcyBjbXNuYyBzIGNtcwogICAgewogICAgICAgIGludCBvOy8vS0pEQkNodmhqdmRoSkRWQ0hudmhqdktKSAogICAgICAgIGNpbiA+PiBvOwogICAgICAgIHZlY3RvcjxpbnQ+ICBhKG8pLCBiKG8pOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbzsgaSsrKQogICAgICAgICAgICAgICBhW2ldID0gaTsvL2hqdmRodnNmdmhkc2hzaHZrc2poc2podnNrCgogICAgICAgIGIgPSBhOy8vY3ZqaGN2aGN2SkNKSENWaG1jIG5ueCBuIGpuCgogICAgICAgIGludCBpZCA9IG8gLSAxOy8vdGVzdGNhc2VzCiAgICAgICAgd2hpbGUgKGlkID49IDApLy9waW5nIHRoZSBkaXJ0CiAgICAgICAgewoKICAgICAgICAgICAgaW50IGN1cmUgPSBhW2lkXTsKICAgICAgICAgICAgaW50IGFjdHVhbF9udW0gPSAqbG93ZXJfYm91bmQoYWxsKHNxcnMpLCBhW2lkXSk7Ci8vc2R2c2RodnNkdmpodnNudmN2bnN2Y2pzbXNtbnZjc252c25tLHMscwogICAgICAgICAgICBpbnQgZGlzdCA9IGFjdHVhbF9udW0gLSBjdXJlOwogICAgICAgICAgICByZXZlcnNlKGIuYmVnaW4oKSArIGRpc3QsIGIuYmVnaW4oKSArIGN1cmUgKyAxKTsKLy9za2p2YnN2ZGpoc2RqbXNuc2NuYm5idnMsbnZjc252Y3ZzbQogICAgICAgICAgICBpZCA9IGRpc3QgLSAxOwogICAgICAgIH0KCiAgICAgICAgZm9yIChhdXRvIHggOiBiKS8vYWtiY2F2c2tjakhDak5YQ1ZYSE5DTlhDeG5jLHhjbnh6bmN2Y21uCiAgICAgICAgLy9ha2NqaENKVkNKVktDSixqY2pjaERDSkQKICAgICAgICAgICAgY291dCA8PCB4IDw8ICcgJzsKICAgICAgICBjb3V0IDw8IGVuZGw7Ly9vdXQgdGhlIGNvZGUgdmFsdWRzc3oKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=