#include<iostream>
using namespace std;
//素数表,加快后续判断
int prime[38] = {0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1};
int n, cas = 1;
int vis[21], num[21];
void dfs( int cur ) {
int i;
if ( cur == n && prime[num[0] + num[n-1]] ){ //递归边界,测试第一个数和最后一个数
cout << num[0] ;
for ( i = 1; i < n; i++ )
cout << " "<< num[i];
cout << endl;
}
else {
for(int i = 2;i <= n; ++i) //尝试放置每一个数i
if( !vis[i] && prime[i + num[cur-1]]) //如果i没有用过,并且与前面一个数之和为素数
{
num[cur] = i; //将该数放进A中
vis[i] = 1; //设置使用标志
dfs(cur + 1); //递归调用
vis[i] = 0; //将标志改回来,清除标志
}
}
}
int main()
{
num[0] = 1; //1的位置不变
while ( cin >> n ) {
memset(vis, 0, sizeof(vis) ); //标记数组清零
cout << "Case " << cas++ <<":\n";
dfs(1);
cout << endl;
}
return 0;
}