#include<bits/stdc++.h>
using namespace std;
int vis[17]={0};
int a[17]={0};
int n;
void print(){
for(int i=1;i<=n;i++)
cout<<a[i]<<' ';
cout<<'\n';
}
bool isPrime(int num){
bool flag=true;
for(int i=2;i<=sqrt(num);i++)
if(num%i==0){
flag=false;break;
}
return flag;
}
bool pd(int cur){
int num=0;
if(cur==n){
if(isPrime(a[cur-1]+a[cur])&&isPrime(a[1]+a[cur])){
print();
return true;
}
else return false;
}else
return isPrime(a[cur-1]+a[cur]);
}
void f(int cur){
for(int i=2;i<=n;i++){
if(!vis[i]){
vis[i]=1;//假设当前要放这个i
a[cur]=i;
if(!pd(cur)){//判断当前的解是否可行
vis[i]=0;
//a[cur]=0;
continue;
}
f(cur+1);//第i+1位放
vis[i]=0;
}
}
}
int main( ) {
cin>>n;
vis[1]=1;
a[1]=1;
f(2);//第一位放1
return 0;
}
//回溯法,觉得书中这张图很助于理解算法