![]()
1 #include<iostream>
2 #include<string>
3 #include<algorithm>
4 #include<vector>
5 #include<cmath>
6 #include<set>
7 using namespace std;
8
9 int a[20]={0,1}; //a[i]=1表示i已经使用过, a[i]=0表示i尚未使用过
10 int b[20]={0,1}; //环中的数字,环中的第一个元素始终为1
11
12 set<vector<int> > ans;
13
14 bool isprimenum(int m)
15 {
16 int t = (int)(sqrt(m*1.0));
17 for(int i=2; i<=t; i++)
18 if(m%i==0)
19 return false;
20 return true;
21 }
22
23 void primeNumCircle(int i, int n)
24 {
25 if(i>n)
26 {
27 if(isprimenum(b[1]+b[n]))
28 {
29 vector<int> ivec;
30 for(int k=1;k<=n; k++)
31 ivec.push_back(b[k]);
32 ans.insert(ivec);
33 }
34 return;
35 }
36 for(int j=2; j<=n; j++)
37 {
38 if(a[j]==0 && isprimenum(b[i-1]+j))
39 {
40 a[j] = 1;
41 b[i] = j;
42 primeNumCircle(i+1, n);
43 a[j] = 0;
44 b[i] = 0;
45 }
46 }
47 }
48
49 int main()
50 {
51 int n;
52 int count=0;
53 while(cin>>n)
54 {
55 if(count>0)
56 cout<<endl;
57 for(int i=0; i<20; i++)
58 a[i]=b[i]=0;
59 a[1]=b[1]=1;
60
61 ans.clear();
62 primeNumCircle(2,n);
63
64 cout<<"Case "<<++count<<":"<<endl;
65 for(set<vector<int> >::iterator it=ans.begin(); it!=ans.end(); it++)
66 {
67 vector<int> temp = *it;
68 for(unsigned i=0; i<temp.size(); i++)
69 cout<<temp[i]<<" ";
70 cout<<endl;
71 }
72 }
73
74 return 0;
75 }