//其实就是全排列 //我们从外星人给的那串数字往下搜索 //一直往下拓展m次 //最后输出结果 //虽然看起来很暴力,但是题目上说了m非常小 #include<bits/stdc++.h> #define inf 0x7fffffff #define ll long long using namespace std; int n,m; #define maxn 10009 int a[maxn]; int b[maxn]; bool in[maxn]; int ks=0; void dfs(int rest) { if(rest==n+1) { ks++; if(ks==1+m)//这里+1是因为外星人自己给的那串数字搜索完了不能算 { for(int i=1;i<=n;i++) { printf("%d ",a[i]); } exit(0); } } for(int i=1;i<=n;i++) { if(ks==0)//一轮还没搜完,先按照外星人的顺序走 { i=a[rest]; } if(in[i]==0) { in[i]=1; a[rest]=i; dfs(rest+1); in[i]=0; } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } dfs(1); return 0; }