#include<iostream>
#include<cmath>
using namespace std;
//the prime ring
int visited[21];
int res[21];
int n;
int flag;
int isPrime(int p)
{
if(p==1) return 0;
else if(p==2||p==3) return 1;
for(int i=2;i<=sqrt(p);i++)
if(p%i==0)
return 0;
return 1;
}
void dfs(int k)
{
if(k>n)
{
flag=1;
for(int i=1;i<=k-1;i++)
{
if(i==1)
cout<<res[i];
else
cout<<" "<<res[i];
}
cout<<endl;
}
for(int i=2;i<=n;i++)
{
if(!visited[i])
{
if(k==n)
{
if(isPrime(i+1)&&isPrime(res[k-1]+i))
{
visited[i]=1;
res[k]=i;
dfs(k+1);
visited[i]=0;
}
// visited[i]=0;
}
else
{
if(isPrime(res[k-1]+i))
{
visited[i]=1;
res[k]=i;
dfs(k+1);
visited[i]=0;
}
// visited[i]=0;
}
}
}
}
int main()
{
//int n;
while(cin>>n)
{
flag=0;
memset(visited,0,sizeof(visited));
memset(res,0,sizeof(res));
res[1]=1;
dfs(2);
if(!flag) cout<<"No answer"<<endl;
}
system("pause");
}
#include<cmath>
using namespace std;
//the prime ring
int visited[21];
int res[21];
int n;
int flag;
int isPrime(int p)
{
if(p==1) return 0;
else if(p==2||p==3) return 1;
for(int i=2;i<=sqrt(p);i++)
if(p%i==0)
return 0;
return 1;
}
void dfs(int k)
{
if(k>n)
{
flag=1;
for(int i=1;i<=k-1;i++)
{
if(i==1)
cout<<res[i];
else
cout<<" "<<res[i];
}
cout<<endl;
}
for(int i=2;i<=n;i++)
{
if(!visited[i])
{
if(k==n)
{
if(isPrime(i+1)&&isPrime(res[k-1]+i))
{
visited[i]=1;
res[k]=i;
dfs(k+1);
visited[i]=0;
}
// visited[i]=0;
}
else
{
if(isPrime(res[k-1]+i))
{
visited[i]=1;
res[k]=i;
dfs(k+1);
visited[i]=0;
}
// visited[i]=0;
}
}
}
}
int main()
{
//int n;
while(cin>>n)
{
flag=0;
memset(visited,0,sizeof(visited));
memset(res,0,sizeof(res));
res[1]=1;
dfs(2);
if(!flag) cout<<"No answer"<<endl;
}
system("pause");
}