//给定n,从1到n,某种排列围成环,使相邻数之和为质数
#include <iostream>
#include <string.h>
#include <time.h>
using namespacestd;
#define N 21
int q[N] = {0,1};
bool used[N];
bool prime[45];
int num = 0;
//算质数,以便判断和是否为质数
void sieve()
{
for (int i =3; i < 40; i ++) {
for (int j =2; j < i; j ++) {
if (i % j ==0) {
prime[i] =false;
for (int k =2; k * i < 40; k ++) {
prime[k * i] =false;
}
}
}
}
}
void dfs(int d,int n)
{
if (d == n +1) {
if (prime[q[1] + q[n]]) {
for (int i =1; i < n; i ++) {
cout <<q[i] <<" ";
}
cout <<q[n] << endl;
}
return;
}
//从给定数字中选择
for (int j =2; j <= n ; j ++) {
//若第j个数没用过
if (!used[j ] ) {
if (prime[j +q[d-1]]){
used[j] =true;
q[d] = j;
dfs(d +1, n);
used[j] =false;
}
}
}
}
int main()
{
memset(prime,true, sizeof(prime ));
sieve();
int n;
while(cin >> n)
{
num ++;
memset(used ,false,sizeof(used));
cout <<"Case " << num <<":" << endl;
dfs(2,n);
cout <<endl;
}
return0;
}