#include using namespace std; int A[100005]; long long minn[100005], maxx[100005]; int getLim(int left, int right, int N, int num) { int m1 = left + (right-left)/3; int m2 = right - (right-left)/3; if(minn[m1]+minn[N-m1]<=num && num<=maxx[m1]+maxx[N-m1]) return m1; if(minn[m2]+minn[N-m2]<=num && num<=maxx[m2]+maxx[N-m2]) return m2; if(minn[m1]+minn[N-m1]>num) return getLim(left, m1-1, N, num); if(maxx[m2]+maxx[N-m2]right) return; int x = getLim(0, (right-left)/2, right-left, num-(right-left)); A[left] = low + x; solve(left+1, left+x, low, low+x-1, maxx[x]); solve(left+x+1, right, low+x+1, high, num - (right-left) - maxx[x]); } int main(){ int q; cin >> q; minn[2] = maxx[2] = 1; for(int i=3; i<=100000; i++) { maxx[i] = maxx[i-1] + (i-1); minn[i] = minn[(i-1)/2] + minn[(i-1)-(i-1)/2] + (i-1); } for(int a0 = 0; a0 < q; a0++){ int len; int c; cin >> len >> c; if(cmaxx[len]) { cout << -1 << "\n"; continue; } solve(1, len, 1, len, c); for(int i=1; i<=len; i++) cout << A[i] << " "; cout << "\n"; } return 0; }