/*
-------------------------------------------------
Author : yrk
date: 2018/12/14 22:40
Description :
-------------------------------------------------
*/
#include<iostream>
using namespace std;
int a[100],su[100],vis[100],n;
int isSu(int n){
for(int i=2;i<n;i++){
if(n%i==0)return 0;
}
return 1;
}
void dfs(int cur){//参数为需要填的位置
if(cur==n&&su[a[0]+a[n-1]]){//出口条件
for(int i=0;i<n;i++)cout<<a[i];
cout<<endl;
}else{
for(int i=2;i<=n;i++){
if(!vis[i]&&su[i+a[cur-1]]){//当前位置其实在cur-1,cur为将要填的位置
vis[i]=1,a[cur]=i;
dfs(cur+1);
a[cur]=0,vis[i]=0;//复位
}
}
}
}
int main() {
cin>>n;
for(int i=2;i<=2*n;i++)su[i]=isSu(i);
a[0]=1;//从1开始,所以1不动
dfs(1);//因为0位已经被固定为1,所以第一个需要填的位置是a[1]
}