#include using namespace std; typedef long long ll; const int N = 100005; void Print(vector& v) { for (int x : v) { cout << x << ' '; } cout << endl; } ll GetMaxCnt(ll n) { return n * (n - 1) / 2; } ll min_cnt[N]; ll GetMinCnt(int n) { if (n <= 1) return 0; ll &res = min_cnt[n]; if (res != -1) return res; res = n - 1; --n; int mid = n / 2; res += GetMinCnt(mid) + GetMinCnt(n - mid); return res; } int Find(int len, int c) { int low = 0, high = len / 2, mid, ans = -1; while (low <= high) { mid = (low + high) / 2; ll tot = GetMaxCnt(mid) + GetMaxCnt(len - mid); if (tot >= c) { ans = mid; low = mid + 1; } else { high = mid - 1; } } return ans; } bool Valid(int len, int c) { int mn = GetMinCnt(len); int mx = GetMaxCnt(len); return mn <= c && c <= mx; } vector v; bool Solve(int len, int c, int begin, int shift) { if (len == 0) { return true; } if (len == 1) { v[begin] = shift; return true; } if (!Valid(len, c)) return false; c -= len - 1; int val_a = Find(len - 1, c); if (val_a == -1) { return false; } int val_b = len - 1 - val_a; v[begin] = val_a + shift; int c1 = GetMinCnt(val_a), c2 = GetMaxCnt(val_b); if (c1 + c2 <= c) { c1 += c - c1 - c2; } else { c2 = c - c1; } // cout << len << ' ' << c << ' ' << begin << ' ' << shift << endl; // cout << val_a << ' ' << val_b << endl; bool can = true; can &= Solve(val_a, c1, begin + 1, shift); can &= Solve(val_b, c2, begin + val_a + 1, v[begin] + 1); return true; } int main() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #ifdef Local freopen("test.in", "r", stdin); #endif memset(min_cnt, -1, sizeof min_cnt); int q; cin >> q; while (q--) { int len, c; cin >> len >> c; v.resize(len); if (!Solve(len, c, 0, 1)) { cout << "-1\n"; } else { Print(v); } } }