Cod sursa(job #986161)
#include<cstdio>
#include<algorithm>
using namespace std;
bool viz[1005],a[1005][1005];int n,k,nr,st[1005];
void backt(int lvl)
{
if(lvl==n+1)
{
nr++;
if(nr==k)
{
for(int i=1;i<=n;i++)
printf("%d%c",st[i],i==n?'\n':' ');
}
return;
}
for(int i=1;i<=n;i++)
if(!viz[i] && (lvl==1 || !a[st[lvl-1]][i]))
{
viz[i]=true;st[lvl]=i;
backt(lvl+1);
if(nr==k) return;
viz[i]=false;st[lvl]=0;
}
}
int main()
{
freopen("dusman.in","r",stdin);
freopen("dusman.out","w",stdout);
int m,x,y;
scanf("%d%d%d",&n,&k,&m);
for(int i=1;i<=m;i++)
scanf("%d%d",&x,&y),
a[x][y]=a[y][x]=true;
backt(1);
return 0;
}