/*题目描述
将1~n这n个数字首尾相连,形成一个圆环,要求圆环上任意两个相邻的数字之和都是一个素数,请编程输出符合条件的素数环。
输入格式
输入数据仅一行,包含一个正整数n(n<=20)。
输出格式
输出数据最多包括10行,每行由n个整数组成,表示前十个符合条件的素数环(不足十个时全部输出)。所有素数环第一个元素必须是1,且按照从小到大的顺序排列。
样例
输入 #1
6
输出 #1
1 4 3 2 5 6
1 6 5 2 3 4
数据范围与提示
无
*/
#include<bits/stdc++.h>
using namespace std;
int n;
int p[25];//用来存储
int pan[25];//用来判断是否用过
int su(int a){
if(a<=1) return 1;
for(int i=2;i*i<=a;i++){
// cout<<1;
if(a%i==0){
return 1;
}
}
return 0;
}
void dfs(int step){
if(step>n){
if(su(p[1]+p[n])==0){
for(int i=1;i<=n;i++){
// cout<<"1"<<" ";
cout<<p[i]<<" ";
}
cout<<endl;
return;
}
}
for(int i=1;i<=n;i++){
if(su(p[step-1]+i)==0&&pan[i]==0){
p[step]=i;
pan[i]=1;
dfs(step+1);
pan[i]=0;
}
}
}
int main(){
cin>>n;
p[1]=1;//固定p[1]为1
pan[1]=1;//标记为已用
dfs(2);
return 0;
}