#include #define pb push_back #define mp make_pair #define sz(x) (int)(x).size() #define li long long #define ld long double #define x first #define y second #define pt pair #define pll pair #define forn(i, t) for(int i = 0; i < (t); i++) #define fore(i, f, t) for(int i = (f); i < (t); i++) #define forr(i, f, t) for(int i = (f) - 1; i >= (t); i--) #define all(x) (x).begin(), (x).end() #define ins insert using namespace std; const int INF = 1e9; const int MOD = 1e9 + 7; const li INF64 = 1e18; const ld EPS = 1e-7; mt19937 myrand(time(NULL)); const int N = 100 * 1000 + 13; int q; int ev[N], od[N]; bool read(){ if(scanf("%d", &q) != 1) return 0; forn(i, N){ ev[i] = (i ? 0 : ev[i] + 2); od[i] = (i ? 1 : od[i] + 2); } return 1; } int cnt; vector lena_sort(vector nums) { if (sz(nums) <= 1) { return nums; } int pivot = nums[0]; vector less; vector more; cnt += sz(nums) - 1; for (int i = 1; i < sz(nums); ++i) { // Comparison if (nums[i] < pivot) { less.pb(nums[i]); } else { more.pb(nums[i]); } } vector sorted_less = lena_sort(less); vector sorted_more = lena_sort(more); vector ans = sorted_less; ans.pb(pivot); for (auto it : sorted_more) ans.pb(it); return ans; } void naive1(int n){ vector perm; forn(i, n) perm.pb(i); int prv = 0; set st; do{ cnt = 0; lena_sort(perm); if (perm[0] != prv){ for (auto it : st) printf("%d ", it); printf("\n"); st = set(); prv = perm[0]; } st.insert(cnt); //printf("%d ", cnt); } while (next_permutation(all(perm))); for (auto it : st) printf("%d ", it); printf("\n"); } void naive(int n, int k){ vector perm; forn(i, n) perm.pb(i); do{ cnt = 0; lena_sort(perm); if (cnt == k){ for (auto it : perm) printf("%d ", it + 1); printf("\n"); return; } } while (next_permutation(all(perm))); printf("-1\n"); } int f[N]; void upd(int x, int n, int val){ for (int i = x; i < n; i |= i + 1) f[i] += val; } int getSum(int x){ int sum = 0; for (int i = x; i >= 0; i = (i & (i + 1)) - 1) sum += f[i]; return sum; } int getKth(int k, int n){ int l = 0, r = n; while (l < r){ int m = (l + r) / 2; if (getSum(m) <= k) l = m + 1; else r = m; } return l; } int find(int n, int k, int cur){ int l = 0, r = (cur + 1) / 2 - 1; li st = n * 1ll * (n - 1) / 2; printf("%d %d\n", l, r); while (l < r){ int m = (l + r) / 2; if (st - (cur * 1ll * m - (m * 1ll * (m + 1))) >= k) l = m + 1; else r = m; } //printf("%d\n", k); //forn(i, (cur + 1) / 2) // printf("%lld ", st - (cur * 1ll * i - (i * 1ll * (i + 1)))); //printf("\n"); //printf("%d ", l - 1); return l - 1; } void get(int n, int k){ memset(f, 0, sizeof(f)); forn(i, n) upd(i, n, 1); int ans[N]; forr(i, n + 1, 1){ int pos = find(n, k, i); if (pos >= i || pos < 0){ printf("-1\n"); return; } pos = getKth(pos, n); printf("%d\n", pos + 1); upd(pos, n, -1); ans[n - i] = pos; } for (auto it : ans) printf("%d ", it + 1); printf("\n"); } void solve(){ int n, k; forn(i, q){ scanf("%d%d", &n, &k); naive(n, k); } } int main(){ #ifdef _DEBUG freopen("input.txt", "r", stdin); #endif while(read()) solve(); return 0; }