#include #define pb push_back #define sqr(x) (x)*(x) #define sz(a) int(a.size()) #define reset(a,b) memset(a,b,sizeof(a)) #define oo 1000000007 using namespace std; typedef long long ll; typedef pair pii; const int maxn=100007; ll dp[maxn]; bool canGen(int len, int c){ return !(c < dp[len] || 1ll*len*(len-1)/2 < c); } pii getMinMax(int len){ return pii(dp[len], 1ll*len*(len-1)/2); } int arr[maxn],d[maxn]; int gen(int s, int f, int len, int c){ if(len<=1 && c==0){ for(int i=1; i<=len; ++i) arr[i+s-1]=i; return len; } c -= (len-1); int n = len-1; int left=0, right=n/2, mid; while(left<=right){ mid=(left+right)/2; pii small = getMinMax(mid); pii big = getMinMax(n-mid); if(small.first + big.first <= c && c <= small.second + big.second){ //found int c1,c2; c1 = small.first; c2 = c - c1; if(c2 > big.second){ c2 = big.second; c1 = c - c2; } int maxValueLeft=gen(s+1,s+mid,mid,c1); int maxValueRight=gen(s+mid+1,f,n-mid,c2); arr[s] = maxValueLeft+1; d[s+mid+1]+=maxValueLeft+1; d[f+1]-=maxValueLeft+1; return maxValueLeft + 1 + maxValueRight; }else if(c < small.first + big.first){ left=mid+1; }else{ right=mid-1; } } return 0; } int main(){ // freopen("input.txt","r",stdin); dp[0]=0; dp[1]=0; for(int i=2; i<=100000; ++i){ dp[i]=i-1; int v=(i-1)/2; dp[i]+=dp[v]+dp[i-1-v]; } int T; scanf("%d",&T); while(T--){ int len,c; scanf("%d%d",&len,&c); if(canGen(len,c)){ for(int i=1; i<=len+1; ++i) d[i]=0; gen(1,len,len,c); int sum=0; for(int i=1; i<=len; ++i){ sum+=d[i]; printf("%d ",arr[i]+sum); } puts(""); }else puts("-1"); } }