#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define pb push_back #define pp pop_back #define f first #define s second #define mp make_pair #define sz(a) (int)((a).size()) #ifdef _WIN32 # define I64 "%I64d" #else # define I64 "%lld" #endif #define fname "." typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair < int, int > pi; const int MAX_N = (int)1e5 + 123; const int inf = (int)1e9 + 123; int n; ll mini[MAX_N], maxi[MAX_N]; vector < int > ans; void solve(int len, int need, int add = 0) { if (len < 2) { assert(need == 0); if (len == 1) ans.pb(1 + add); return; } assert(need >= len - 1); need -= (len - 1); int l = 0, r = len / 2, mid = -1, best = -1; while(l <= r) { mid = (l + r) / 2; if (mini[mid] + mini[len - 1 - mid] <= need) { best = mid; r = mid - 1; } else l = mid + 1; } assert(best != -1); assert(mini[best] + mini[len - 1 - best] <= need && maxi[best] + maxi[len - 1 - best] >= need); ans.pb(best + 1 + add); ll L = mini[best]; L += max(0ll, 0ll + need - mini[best] - maxi[len - 1 - best]); solve(best, (int)L, add); need -= L; solve(len - 1 - best, need, add + best + 1); } int main() { #ifdef DEBUG freopen("input.txt", "r", stdin); #endif for (int i = 2; i <= (int)1e5; i++) { maxi[i] = i - 1 + 0ll + maxi[i - 1]; mini[i] = mini[(i - 1) / 2] + 0ll + mini[(i - 1) / 2 + (i - 1) % 2] + 0ll + i - 1; } int q; scanf("%d", &q); for (int i = 1, len, c; i <= q; i++) { scanf("%d%d", &len, &c); if (maxi[len] < c || mini[len] > c) { puts("-1"); continue; } ans.clear(); solve(len, c); for (auto j : ans) printf("%d ", j); printf("\n"); } return 0; }