/*AMETHYSTS*/ #pragma comment(linker, "/STACK:1000000000") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define ld double #define pii pair #define mp make_pair using namespace std; const int maxn = (int)1e5 + 10; ll dp[maxn]; ll rm[maxn]; ll go(int n) { if (n == 1 || n == 0) { return dp[n] = 0; } if (dp[n] != 0) { return dp[n]; } dp[n] = go((n - 1) / 2) + go(n - 1 - (n - 1) / 2); return dp[n] + n - 1; } void write(int len, ll c, int l, int r) { if (len == 0) { return; } else if (len == 1) { printf("%d ", l); return; } for (int i = 1; i <= len; i++) { if (go(i - 1) + go(len - i) + len - 1 <= c && c <= rm[i - 1] + rm[len - i] + len - 1) { ll lc = go(i - 1); ll rc = go(len - i); if (lc + rc < c - len + 1) { lc = min(c - rc - len + 1, rm[i - 1]); } if (lc + rc < c) { rc = min(c - lc - len + 1, rm[len - i]); } printf("%d ", l + i - 1); write(i - 1, lc, l, l + i - 2); write(len - i, rc, l + i, r); break; } } } int main() { int q; cin >> q; for (int i = 0; i < maxn; i++) { rm[i] = (ll)i * (i - 1) / 2; } for (int i = 0; i < q; i++) { int len, c; scanf("%d %d", &len, &c); ll rmm = ((ll)len * (len - 1)) / 2; ll lmm = go(len); if (c < lmm || c > rmm) { printf("-1\n"); } else { write(len, c, 1, len); printf("\n"); } } return 0; }