#include<stdio.h>
int dep,n;
int can[41][41]={0};
int an[81];
int use[81];
int yes[80];
find()
{
int i,j,k;
k=an[dep];
dep++;
for (i=1;i<can[k][0]+1;i++) if (use[can[k]]==1)
{
use[can[k]]=0;
an[dep]=can[k];
if (dep==n)
{
if (yes[an[dep]+an[1]]==1)
{
for (j=1;j<n;j++)
printf(\"%d \",an[j]);
printf(\"%d\\n\",an[n]);
}
} else
find();
use[can[k]]=1;
}
dep--;
}
int main(int argc, char* argv[])
{
int shu[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67};
int ncase=0,i,j,u,k;
for (i=1;i<20;i++) for (j=0;j<20;j++) can[j]=0;
for (i=1;i<40;i++)
{
yes=1;
for (j=2;j<=i /2 ;j++) if (i%j==0) {yes=0;break;};
}
for (i=1;i<20;i++)
for (j=i+1;j<20;j++)
{
k=i+j;
if (yes[k]==1) {
can[0]++;
can[can[0]]=j;
can[j][0]++;
can[j][can[j][0]]=i;
};
}
while ( scanf(\"%d\",&n)!=EOF)
{
ncase++;
printf(\"Case %d:\\n\",ncase);
for (i=0;i<=n;i++) use=1;
i=1;an=1;use[1]=0;
dep=1;
if (n==1) {
printf(\"\\n\");
} else
find();
printf(\"\\n\");
}
return 0;
} |