//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "permutations"
#define ff(i,a,b) for(auto i=(a); i<=(b); ++i)
#define ffr(i,b,a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define pb emplace_back
#define all(s) (s).begin(), (s).end()
using ll = long long;
inline void rf(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen(file".inp","r")){
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const ll BASE = 22071997LL;
const ll MODH = 1000000000LL + 19972207LL;
ll C[40][40];
ll comb(int n, int k){
if(k<0 || k>n) return 0;
return C[n][k];
}
ll S(int m, int V){
if(V<m) return 0;
if(V>2*m) V=2*m;
return comb(V,m) - comb(V,m+1);
}
ll catalan(int n){
return comb(2*n, n) / (n+1);
}
int main(){
rf();
// precompute C up to 36
ff(i,0,36){
C[i][0]=C[i][i]=1;
ff(j,1,i-1) C[i][j]=C[i-1][j-1]+C[i-1][j];
}
int T;
if(!(cin>>T)) return 0;
while(T--){
int n; ll k;
cin>>n>>k; // n <= 18
ll cat = catalan(n);
if(k>cat){ cout<<-1<<nl; continue; }
vector<int> leftVals;
int upper = 2*n-1;
for(int m=n; m>=1; --m){
int lo=m, hi=min(upper, 2*m-1);
while(lo<hi){
int mid=(lo+hi)>>1;
if(S(m,mid) >= k) hi=mid;
else lo=mid+1;
}
int v=lo;
k -= S(m, v-1);
leftVals.pb(v);
upper = v-1;
}
sort(all(leftVals));
vector<int> perm; perm.reserve(2*n);
for(int i=(int)leftVals.size()-1;i>=0;--i) perm.pb(leftVals[i]);
vector<int> mark(2*n+1,0);
for(int x:leftVals) mark[x]=1;
for(int x=2*n; x>=1; --x) if(!mark[x]) perm.pb(x);
ll ans=0, pw=1;
ff(i,1,2*n){
pw = (pw * BASE) % MODH;
ans = (ans + (ll)perm[i-1] * pw) % MODH;
}
cout<<ans<<nl;
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAicGVybXV0YXRpb25zIgojZGVmaW5lIGZmKGksYSxiKSBmb3IoYXV0byBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgZmZyKGksYixhKSBmb3IoYXV0byBpPShiKTsgaT49KGEpOyAtLWkpCiNkZWZpbmUgbmwgIlxuIgojZGVmaW5lIHBiIGVtcGxhY2VfYmFjawojZGVmaW5lIGFsbChzKSAocykuYmVnaW4oKSwgKHMpLmVuZCgpCgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmlubGluZSB2b2lkIHJmKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaWYgKGZvcGVuKGZpbGUiLmlucCIsInIiKSl7CiAgICAgICAgZnJlb3BlbihmaWxlIi5pbnAiLCJyIixzdGRpbik7CiAgICAgICAgZnJlb3BlbihmaWxlIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQp9Cgpjb25zdCBsbCBCQVNFID0gMjIwNzE5OTdMTDsKY29uc3QgbGwgTU9ESCA9IDEwMDAwMDAwMDBMTCArIDE5OTcyMjA3TEw7CgpsbCBDWzQwXVs0MF07CgpsbCBjb21iKGludCBuLCBpbnQgayl7CiAgICBpZihrPDAgfHwgaz5uKSByZXR1cm4gMDsKICAgIHJldHVybiBDW25dW2tdOwp9CgpsbCBTKGludCBtLCBpbnQgVil7CiAgICBpZihWPG0pIHJldHVybiAwOwogICAgaWYoVj4yKm0pIFY9MiptOwogICAgcmV0dXJuIGNvbWIoVixtKSAtIGNvbWIoVixtKzEpOwp9CgpsbCBjYXRhbGFuKGludCBuKXsKICAgIHJldHVybiBjb21iKDIqbiwgbikgLyAobisxKTsKfQoKaW50IG1haW4oKXsKICAgIHJmKCk7CiAgICAvLyBwcmVjb21wdXRlIEMgdXAgdG8gMzYKICAgIGZmKGksMCwzNil7CiAgICAgICAgQ1tpXVswXT1DW2ldW2ldPTE7CiAgICAgICAgZmYoaiwxLGktMSkgQ1tpXVtqXT1DW2ktMV1bai0xXStDW2ktMV1bal07CiAgICB9CgogICAgaW50IFQ7IAogICAgaWYoIShjaW4+PlQpKSByZXR1cm4gMDsKICAgIHdoaWxlKFQtLSl7CiAgICAgICAgaW50IG47IGxsIGs7CiAgICAgICAgY2luPj5uPj5rOyAgICAgICAgICAgICAgICAgLy8gbiA8PSAxOAoKICAgICAgICBsbCBjYXQgPSBjYXRhbGFuKG4pOwogICAgICAgIGlmKGs+Y2F0KXsgY291dDw8LTE8PG5sOyBjb250aW51ZTsgfQoKICAgICAgICB2ZWN0b3I8aW50PiBsZWZ0VmFsczsKICAgICAgICBpbnQgdXBwZXIgPSAyKm4tMTsKICAgICAgICBmb3IoaW50IG09bjsgbT49MTsgLS1tKXsKICAgICAgICAgICAgaW50IGxvPW0sIGhpPW1pbih1cHBlciwgMiptLTEpOwogICAgICAgICAgICB3aGlsZShsbzxoaSl7CiAgICAgICAgICAgICAgICBpbnQgbWlkPShsbytoaSk+PjE7CiAgICAgICAgICAgICAgICBpZihTKG0sbWlkKSA+PSBrKSBoaT1taWQ7CiAgICAgICAgICAgICAgICBlbHNlIGxvPW1pZCsxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB2PWxvOwogICAgICAgICAgICBrIC09IFMobSwgdi0xKTsKICAgICAgICAgICAgbGVmdFZhbHMucGIodik7CiAgICAgICAgICAgIHVwcGVyID0gdi0xOwogICAgICAgIH0KICAgICAgICBzb3J0KGFsbChsZWZ0VmFscykpOwoKICAgICAgICB2ZWN0b3I8aW50PiBwZXJtOyBwZXJtLnJlc2VydmUoMipuKTsKICAgICAgICBmb3IoaW50IGk9KGludClsZWZ0VmFscy5zaXplKCktMTtpPj0wOy0taSkgcGVybS5wYihsZWZ0VmFsc1tpXSk7CgogICAgICAgIHZlY3RvcjxpbnQ+IG1hcmsoMipuKzEsMCk7CiAgICAgICAgZm9yKGludCB4OmxlZnRWYWxzKSBtYXJrW3hdPTE7CiAgICAgICAgZm9yKGludCB4PTIqbjsgeD49MTsgLS14KSBpZighbWFya1t4XSkgcGVybS5wYih4KTsKCiAgICAgICAgbGwgYW5zPTAsIHB3PTE7CiAgICAgICAgZmYoaSwxLDIqbil7CiAgICAgICAgICAgIHB3ID0gKHB3ICogQkFTRSkgJSBNT0RIOwogICAgICAgICAgICBhbnMgPSAoYW5zICsgKGxsKXBlcm1baS0xXSAqIHB3KSAlIE1PREg7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGFuczw8bmw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=