#include <stdio.h>
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <queue>
#include <math.h>
#define MAX 30
using namespace std;
int n;
struct P{
int x;
int nextx;
int flag;
}s[MAX];
int ans[MAX];
bool is_prime(int a)
{
for (int i = 2;i <= sqrt(a);i++)
{
if(a%i==0)
return 0;
}
return 1;
}
void dfs(int a,int count1)
{
if(count1==n)
{
if(is_prime(a+1))
{
int nx;
nx = a;
for (int i = 0;i < n-1;i++)
{
ans[i] = nx;
nx = s[nx].nextx;
}
cout<<1;
for (int i = n-2;i >=0;i--)
cout<<" "<<ans[i];
cout<<endl;
return;
}
}
for (int i=2;i <= n;i++)
{
if(s[i].flag==0&&is_prime(i+a))
{
s[i].flag = 1;
s[i].nextx = a;
dfs(i,count1+1);
s[i].nextx = 0;
s[i].flag = 0;
}
}
}
int main(void)
{
int k = 1;
while (scanf("%d",&n) != EOF)
{
for (int i = 0;i <= n;i++)
{
s[i].x = i;
s[i].flag = s[i].nextx = 0;
}
printf("Case %d:\n",k++);
dfs(1,1);
cout<<endl;
}
return 0;
}