https://www.papamelon.com/problem/10
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL f[25];
void init()
{
f[0]=1;
for(int i=1;i<=20;i++) f[i]=f[i-1]*i;
}
void solve()
{
LL n,k; cin>>n>>k;
vector<int>st(n+1,0);
vector<int>ans;
for(int pos=n;pos>0;pos--)
{
LL sum=0;
int cur=1;
for(;cur<=n;cur++)
{
if(!st[cur])
{
if(sum+f[pos-1]>=k) break;
sum+=f[pos-1];
}
}
st[cur]=1;
ans.push_back(cur);
k-=sum;
}
for(int i=0;i<ans.size();i++)
{
if(i) cout<<" ";
cout<<ans[i];
}
cout<<endl;
}
int main(void)
{
int t; cin>>t;
init();
while(t--) solve();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL f[25],t;
void init()
{
f[0]=1;
for(int i=1;i<=20;i++) f[i]=f[i-1]*i;
}
void solve()
{
LL n,k; cin>>n>>k;
vector<int>st(n+1,1);//1表示都还没选
vector<int>ans;
for(int i=n;i;i--)//还剩余多少个数字
{
LL sum=0;
int index=0;
for(index=1;index<=n;index++)//枚举剩余的数字
{
if(st[index])
{
if(sum+f[i-1]>=k) break;
else sum+=f[i-1];
}
}
st[index]=0;
ans.push_back(index);
k-=sum;
}
for(int i=0;i<ans.size();i++)
{
if(i) cout<<" ";
cout<<ans[i];
}
cout<<endl;
}
int main(void)
{
init();
cin>>t;
while(t--) solve();
return 0;
}