//这是一道很水的搜索题目,在这个题目面,我用的是栈 这种题目应该是非常简单的搜索 但是还是花了 我一些时间代码也写得不好 效率估计还挺低的
#include <stdio.h>
#include <string.h>
int b[1000];
int a[1000];
int top;
void pushstack(int i)
{
b[++top]=i;
}
int popstack()
{
int k=b[top];
top=top-1;
return k;
}
int topstack()
{
//printf("%d\n",b[top]);
return b[top];
}
int emptystack()
{
if(top==-1)
return 1;
else
return 0;
}
int sum(int i,int j)
{
int sum1=i+j;
for(i=2;i<=sum1/2;i++)
{
if(sum1%i==0)
return 0;
}
return 1;
}
void search1(int n)
{
int i;
for(i=1;i<=n;i++)
{
if(sum(i,topstack())==1&&a[i]==0)
{
pushstack(i);
a[i]=1;
search1(n);
}
}
}
void search(int st,int n)
{
int i,k,flag=0;
while(1)
{
flag=0;
for(i=st;i<=n;i++)
{
//printf("<<%d %d\n",i,topstack());
if(sum(i,topstack())==1&&a[i]==0)
{
pushstack(i);
a[i]=1;
search1(n);
break;
}
}
if(top==n-1)
{
if(sum(b[top],1)==1)
{
for(i=0;i<top;i++)
printf("%d ",b[i]);
printf("%d\n",b[top]);
}
}
k=popstack();
if(k==1)
{
break;
}
a[k]=0;
st=k+1;
for(i=st;i<=n;i++)
{
if(sum(i,topstack())==1&&a[i]==0)
{
pushstack(i);
a[i]=1;
st=1;
flag=1;
break;
}
}
if(flag==0)
{
st=n+1;
}
}
return ;
}
int main()
{
int n;
int i=1,j,k;
while(scanf("%d",&n)!=EOF)
{
printf("Case %d:\n",i);
i++;
top=-1;
memset(a,0,sizeof(a));
pushstack(1);
a[1]=1;
search(1,n);
printf("\n");
}
return 0;
}