蒟蒻的自我拯救。。。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int save[100][100],ans[100],n,sum;
bool vis[100];
void dfs(int num,int dep)
{
ans[dep]=num;
if(dep==20)
{
if(save[num][n])
{
sum++;
printf("%d: ",sum);
for(int i=1;i<=20;i++)
{
printf(" %d",ans[i]);
}
printf(" %d\n",n);
}
return;
}
else
{
for(int i=1;i<=20;i++)
{
if(save[num][i]&&!vis[i])
{
vis[i]=1;
dfs(i,dep+1);
vis[i]=0;
}
}
}
}
int main()
{
int a,b,c;
for(int i=1;i<=20;i++)
{
scanf("%d%d%d",&a,&b,&c);
save[i][a]=save[i][b]=save[i][c]=1;
}
while(scanf("%d",&n))
{
if(!n)
break;
memset(vis,0,sizeof(vis));
vis[n]=1;
dfs(n,1);
}
return 0;
}