#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define f first #define s second #define ll long long #define ull unsigned long long #define mp make_pair #define pb push_back #define vi vector #define ld long double #define pii pair #define y1 sda using namespace std; const int N = int(3e5), mod = int(1e9) + 7; int n, q, c; ll a[N + 10], b[N + 10]; void rec(int n,int c, int add){ if(n == 0) return; if(n == 1){ printf("%d ", add + n); return; } c -= n - 1; if(a[n - 1] <= c && c <= b[n - 1]){ printf("%d ", n + add); rec(n - 1, c, add); return; } int l = 0, r = (n - 1) / 2 + 1; while(r - l > 1){ int mid = (r + l) / 2; if(a[mid] + a[n - 1 - mid] <= c) r = mid; else l = mid; } printf("%d ", r + add + 1); rec(r,a[r], add); rec(n - 1 - r, c - a[r], add + r + 1); } int main () { a[1] = b[1] = 0; for(int i = 2; i <= N; i++){ a[i] = i - 1 + a[(i - 1) / 2] + a[i - (i - 1)/2 - 1]; b[i] = 1ll * i * (i - 1) / 2; } scanf("%d",&q); while(q--){ scanf("%d%d",&n,&c); if(a[n] > c || c > b[n]){ puts("-1"); continue; } rec(n,c,0); printf("\n"); } return 0; }