#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,a[20],vis[20];
int isp(int n)
{
if(n<2)
return 0;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void dfs(int cur)
{
if(cur==n&&isp(a[0]+a[n-1]))
{
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
}
printf("\n");
}
else for(int i=2;i<=n;i++)//尝试放置每个数i
{
if(!vis[i]&&isp(i+a[cur-1]))//如果i前面没用过,并且和前一个数之和为素数
{
a[cur]=i;
vis[i]=1;//设置使用标志
dfs(cur+1);
vis[i]=0;//清除标志
}
}
}
int main(){
cin>>n;
memset(vis,0,sizeof(vis));
a[0]=1;
dfs(1);
return 0;
}
#include<cstring>
#include<cstdio>
using namespace std;
int n,a[20],vis[20];
int isp(int n)
{
if(n<2)
return 0;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void dfs(int cur)
{
if(cur==n&&isp(a[0]+a[n-1]))
{
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
}
printf("\n");
}
else for(int i=2;i<=n;i++)//尝试放置每个数i
{
if(!vis[i]&&isp(i+a[cur-1]))//如果i前面没用过,并且和前一个数之和为素数
{
a[cur]=i;
vis[i]=1;//设置使用标志
dfs(cur+1);
vis[i]=0;//清除标志
}
}
}
int main(){
cin>>n;
memset(vis,0,sizeof(vis));
a[0]=1;
dfs(1);
return 0;
}