#include using namespace std; typedef long long ll; ll mincomp[100001]; ll maxcomp[100001]; int ans[100000]; bool build(int a, int b, int comp) { int len = b - a + 1; if (len <= 1) return comp == 0; if (comp < mincomp[len] || comp > maxcomp[len]) { return 0; } int lft = comp - (len - 1); for (int i = 0; i < len; ++i) { ll l1 = mincomp[i]; ll r1 = maxcomp[i]; ll l2 = mincomp[len - i - 1]; ll r2 = maxcomp[len - i - 1]; l1 = max(l1, lft + r2); r1 = min(r1, lft - l2); if (l1 <= r1) { swap(ans[a], ans[a + i]); bool r = 1; r = build(a + 1, a + i, l1); r &= build(a + i + 1, b, lft - l1); return r; } } return 0; } int main(){ for (int i = 2; i <= 100000; ++i) { if (i & 1) { mincomp[i] = i - 1 + 2 * mincomp[(i - 1) / 2]; } else { mincomp[i] = i - 1 + mincomp[(i - 1) / 2] + mincomp[i - 1 - (i - 1) / 2]; } maxcomp[i] = i - 1 + maxcomp[i - 1]; } int q; cin >> q; for(int a0 = 0; a0 < q; a0++){ int len; int c; cin >> len >> c; for (int i = 0; i < len; ++i) ans[i] = i + 1; if (build(0, len - 1, c)) { for (int i = 0; i < len; ++i) { cout << ans[i] << " "; } cout << "\n"; } else cout << "-1\n"; // your code goes here } return 0; }