#include #include #include #define int long long int using namespace std; const int MAX = 1e5 + 5; int M[MAX]; vector v; int MINIMUM(int val) { // cout << val << endl; if(val == 1 || val == 0) return 0; if(val == 2) return 1; if(M[val] != -1) return M[val]; int left = val - 1; return M[val] = MINIMUM(left >> 1) + MINIMUM(left - (left >> 1)) + (val - 1); } int MAXIMUM(int val){ return (val * (val - 1)) >> 1; } void rec(int num, int need, int maxi, int mini){ if(need == 0){ for(int i=mini; i<=maxi; ++i) v.push_back(i); return; } need = need - (num - 1); for(int left = 0; left < num; ++left) { int right = num - left - 1; int lmin = MINIMUM(left); int lmax = MAXIMUM(left); int rmin = MINIMUM(right); int rmax = MAXIMUM(right); if((need >= lmin + rmin) && (need <= lmax + rmax)) { // cout << num << ' ' << need << ' ' << maxi << ' ' << mini << ' ' << left << endl; v.push_back(mini + left); rec(left, lmax, mini + left - 1, mini); rec(right, need - lmax, maxi, mini + left + 1); return; } } } signed main(){ int Q; cin >> Q; memset(M, -1, sizeof M); while(Q--){ int N, M; cin >> N >> M; int MINI = MINIMUM(N); int MAXI = ((N - 1) * 1LL * N) >> 1; // cout << MINI << ' ' << MAXI << endl; if(M < MINI || M > MAXI) cout << -1 << endl; else { v.clear(); rec(N, M, N, 1); for(auto it:v) cout << it << ' '; cout << endl; } } } // 5, 7 // // f(N) = N - 1 + f(x) + f(N - x); // x , N - x