#include <bits/stdc++.h>
using namespace std;
struct DSU {
  vector<int> p;
  DSU(int N) : p(N, -1) {}
  int get(int x) { return p[x] < 0 ? x : p[x] = get(p[x]); }
  bool sameSet(int a, int b) { return get(a) == get(b); }
  int size(int x) { return -p[get(x)]; }
  void unite(int x, int y) {
    x = get(x), y = get(y);
    if (x == y) return;
    if (p[x] > p[y]) swap(x, y);
    p[x] += p[y], p[y] = x;
  }
};
int T, N;
vector<int> A;
long long K, F[51], DP[51], INF = LLONG_MAX;
long long add(const long long &a, const long long &b) {
  return (a > INF - b) ? INF : a + b;
}
long long mul(const long long &a, const long long &b) {
  return (a > INF / b) ? INF : a * b;
}
long long f(int i) { return i >= 0 ? F[i] : 1ll; }
long long dp(int i) {
  if (i == N) return 1;
  if (DP[i] != -1) return DP[i];
  long long ans = 0;
  for (int j = (int)i; j < (int)N; j++)
    ans = add(ans, mul(dp(j + 1), f((j - i + 1) - 2)));
  return DP[i] = ans;
}
void block(int i, int j, long long R) {
  if (i == j) return;
  vector<bool> on(j - i + 1, 0);
  on[j - i] = 1;
  DSU d(j - i + 1);
  d.unite(0, j - i);
  for (int k = (int)i + 1; k < (int)j; k++)
    for (int l = 0; l < (int)j - i + 1; l++)
      if (!d.sameSet(k - i, l) && !on[l]) {
        if (R > f(j - k - 1))
          R -= f(j - k - 1);
        else {
          A[k] = l + i + 1;
          d.unite(k - i, l);
          on[l] = 1;
          break;
        }
      }
  for (int l = 0; l < (int)j - i; l++)
    if (!on[l]) A[j] = l + i + 1;
}
void get_size(int i) {
  if (i == N) return;
  int j = i;
  while (j < N - 1 && mul(f((j - i + 1) - 2), dp(j + 1)) < K)
    K -= mul(f((j - i + 1) - 2), dp(j + 1)), j++;
  block(i, j, (K - 1) / dp(j + 1) + 1);
  K -= mul((K - 1) / dp(j + 1), dp(j + 1));
  A[i] = j + 1;
  get_size(j + 1);
}
int main() {
  F[0] = 1;
  for (int i = 0; i < (int)50; i++) F[i + 1] = mul(F[i], i + 1);
  cin >> T;
  while (T--) {
    memset(DP, -1, sizeof DP);
    cin >> N >> K;
    if (K > dp(0)) {
      cout << -1 << '\n';
      continue;
    }
    A.assign(N, 0);
    get_size(0);
    for (int i = 0; i < (int)N; i++) cout << A[i] << ' ';
    cout << '\n';
  }
}
