#include using namespace std; int cnt; int getMin(int sz){ if(sz <= 1) return 0; return sz - 1 + getMin((sz - 1) / 2) + getMin((sz - 1) - (sz - 1) / 2); } long long getMax(long long sz){ return (sz * (sz - 1)) / 2; } vector< int > res; int __[4 * 100200]; void lenaSortByMe(int sz , int rem , int& value , int idx){ if(sz == 0)return ; res.push_back(idx); if(!rem){__[idx] = value ++;return ;} int block1 = 0 , block2 = 0; int VB1 = 0 , VB2 = 0; rem -= (sz - 1); for(int i = 0; i < sz ;i ++ ){ int B1 = i , B2 = sz - 1 - i; long long mn = getMin(B1) + getMin(B2) ; long long mx = getMax(B1) + getMax(B2) ; if(rem >= mn && rem <= mx){ block1 = B1 ; block2 = B2 ; break; } } long long l = getMin(block1) , r = min(getMax(block1) , 1LL* rem); long long l1 = getMin(block2) , r1 = getMax(block2); while(l <= r){ long long md = (l + r) / 2 , tmp = rem - md; assert(tmp >= 0); if(tmp >= l1 && tmp <= r1) VB1 = md , VB2 = tmp , r = md - 1; else l = md + 1; } assert(VB1 + VB2 == rem); lenaSortByMe(block1 , VB1 , value , idx * 2); __[idx] = value++; lenaSortByMe(block2 , VB2 , value , idx * 2 + 1); } int main(){ int n , x; int q; scanf("%d" , &q); while(q --){ res.clear(); scanf("%d%d" , &n , &x); int value = 1; long long l = getMin(n) , r = getMax(n); if(x < l || x > r){ puts("-1"); continue; } lenaSortByMe(n , x , value , 1); for(int i = 0 ;i < res.size() ;i ++) printf("%d ", __[res[i]]); puts(""); } }