//深搜,注意最后还要和1相加判断是不是素数;
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int mp[100], b[100];
int mark[100];
int a[100];
int n, k, h = 0;
void inint()
{
memset(a, 0, sizeof(a));
for(int i = 2; i*i <= 100; i++)
for(int j = i; j*i < 100; j++)
if(!a[j*i]) a[j*i] = 1;
}
void dfs(int x)
{
if(k == n-1)
{
if(a[b[n-2]+1]) return ;
printf("1");
for(int i = 0; i < n-1; i++)
printf(" %d", b[i]);
printf("\n");
return ;
}
for(int i = 2; i <= n; i++)
if(!mark[i] && !a[mp[i]+x])
{
b[k++] = mp[i];
mark[i] = 1;
dfs(mp[i]);
mark[i] = 0;
k--;//如果这个数不符合 下一个数还要在这个位置,k不变
}
return ;
}
int main()
{
while(cin >> n)
{
printf("Case %d:\n", ++h);
inint();
for(int i = 1; i <= n; i++) mp[i] = i;
memset(mark, 0, sizeof(mark));
mark[1] = 1;
k = 0;
dfs(1);
printf("\n");
}
}