#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[45],vis[45],prime[45];
int isprime(int n)
{
for(int i=2;i<n;i++)
{
if(n%i==0){return 0;}
}
return 1;
}
void builed()
{
for(int i=2;i<45;i++)
{
prime[i]=isprime(i);
}
}
void dfs(int step,int n)
{
if(step==n&&prime[1+a[step-1]])
{
for(int i=0;i<n;i++)
{
cout<<a[i];
if(i!=n)cout<<" ";
}
cout<<endl;
}
for(int i=2;i<=n;i++)
{
if(vis[i]==0&&prime[a[step-1]+i]==1)
{
vis[i]=1;
a[step]=i;
dfs(step+1,n);
vis[i]=0;
}
}
}
int main()
{
builed();
int n;
while(cin>>n)
{
memset(vis,0,sizeof(vis));
a[0]=1;
dfs(1,n);
}
return 0;
}
#include<algorithm>
#include<cstring>
using namespace std;
int a[45],vis[45],prime[45];
int isprime(int n)
{
for(int i=2;i<n;i++)
{
if(n%i==0){return 0;}
}
return 1;
}
void builed()
{
for(int i=2;i<45;i++)
{
prime[i]=isprime(i);
}
}
void dfs(int step,int n)
{
if(step==n&&prime[1+a[step-1]])
{
for(int i=0;i<n;i++)
{
cout<<a[i];
if(i!=n)cout<<" ";
}
cout<<endl;
}
for(int i=2;i<=n;i++)
{
if(vis[i]==0&&prime[a[step-1]+i]==1)
{
vis[i]=1;
a[step]=i;
dfs(step+1,n);
vis[i]=0;
}
}
}
int main()
{
builed();
int n;
while(cin>>n)
{
memset(vis,0,sizeof(vis));
a[0]=1;
dfs(1,n);
}
return 0;
}