#include <bits/stdc++.h>
using namespace std;
long long dp[53], fakt[53];
long long inf = 2e18;
vector<long long> sol;
int bio[55], parent[55], sz[55];
long long mult(long long first, long long second) {
  if (inf / first <= second) return inf;
  return first * second;
}
long long sum(long long first, long long second) {
  if (first + second > inf) return inf;
  return first + second;
}
long long rek(int first) {
  if (first == 0) return dp[first] = 1;
  if (first < 0) return 0;
  if (dp[first] != -1) return dp[first];
  dp[first] = 0;
  for (int i = 1; i <= first; i++) {
    dp[first] = sum(dp[first], mult(fakt[i - 1], rek(first - i)));
  }
  return dp[first];
}
int nadi(int first) {
  while (first != parent[first]) first = parent[first];
  return first;
}
void unite(int first, int second) {
  first = nadi(first);
  second = nadi(second);
  if (sz[first] < sz[second]) swap(first, second);
  parent[second] = first;
  sz[first] = sz[second] + sz[first];
}
vector<long long> daj(long long n, long long k) {
  int ind, br = 0;
  vector<long long> ret;
  ret.push_back(n);
  bio[n] = 1;
  if (n == 1) return ret;
  unite(n, 1);
  for (int i = 2; i < n; i++) {
    ind = k / fakt[n - i] + 1;
    br = 0;
    for (int j = 1; j <= n; j++) {
      if (j == i) continue;
      if (!bio[j] and nadi(i) != nadi(j)) br++;
      if (br == ind) {
        ret.push_back(j);
        bio[j] = 1;
        unite(i, j);
        break;
      }
    }
    k = k % fakt[n - i];
  }
  for (int i = 1; i <= n; i++) {
    if (!bio[i]) {
      ret.push_back(i);
      break;
    }
  }
  return ret;
}
void clear(long long n) {
  for (long long i = 1; i <= n; i++) {
    bio[i] = 0;
    parent[i] = i;
    sz[i] = 1;
  }
}
void solve(long long n, long long k, long long add) {
  if (n == 0) return;
  long long i = 1;
  while (k > 0 and k >= mult(fakt[i - 1], dp[n - i])) {
    k -= mult(fakt[i - 1], dp[n - i]);
    i++;
  }
  clear(i);
  vector<long long> temp = daj(i, k / dp[n - i]);
  for (int j = 0; j < i; j++) {
    sol.push_back(temp[j] + add);
  }
  solve(n - i, k % dp[n - i], add + i);
}
int main() {
  ios::sync_with_stdio(0);
  fakt[0] = 1ll, fakt[1] = 1ll;
  for (long long i = 2; i <= 50; i++) {
    fakt[i] = mult(i - 1, fakt[i - 1]);
  }
  memset(dp, -1, sizeof dp);
  rek(50);
  int t;
  cin >> t;
  while (t--) {
    long long n, k;
    cin >> n >> k;
    if (dp[n] < k) {
      cout << -1 << "\n";
      continue;
    }
    solve(n, k - 1, 0ll);
    for (int i = 0; i < sol.size(); i++) {
      cout << sol[i] << " ";
    }
    cout << "\n";
    sol.clear();
  }
  return 0;
}
