http://acm.nyist.net/JudgeOnline/problem.php?pid=488
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[50],save[25],vis[25];
int n,flag;
void DFS(int x,int num)
{
int i;
if(x==n&&!a[1+num]) //n-1个数
{
for(i=0;i<n-1;i++)
cout<<save[i]<<' ';
cout<<save[i]<<endl;
}
for(i=2;i<=n;i++)
{
if(!vis[i]&&!a[num+i])
{
vis[i]=1;
save[x]=i;
DFS(x+1,i);
vis[i]=0;//回溯
}
}
}
int main()
{
int i,j,k;
memset(a,0,sizeof(a));
for(i=2;i<10;i++)
{
if(!a[i])
for(j=2*i;j<50;j+=i)
a[j]=1;
}
k=1;
while(cin>>n&&n)
{
cout<<"Case "<<k++<<":"<<endl;
if(n==1)//1自成环
{cout<<1<<endl;continue;}
if(n%2!=0)//奇数不可能成环
{cout<<"No Answer"<<endl;continue;}
memset(vis,0,sizeof(vis));
save[0]=vis[1]=1;
DFS(1,1);
}
return 0;
}