#include<iostream>
#include<cmath>
using namespace std;
int n;
int a[21];//用于存放素数环数字
bool b[21];//用其下标代表素数环中的数字,其存放内容代表改数字是否可用
int total=0;//代表素数环个数

bool pd(int x,int y);//判断x+y是否为素数
void search(int t);//第归判断1-n是否满足条件
void print();//打印满足条件的素数环

int main(){
    cin>>n;
	for(int i=1;i<=n;i++)
		b[i]=true;
		
	//a[0]=1;//保证a[1]的第一位可以放1 

	//从1开始搜索
	search(1);

	//打印出素数环个数
	cout<<"total:"<<total; 
	
}

//第归判断1-n是否满足条件
//这里的t代表素数环中第几个
void search(int t){
	
	//遍历1-n个数字
	for(int i=1;i<=n;i++){
		//如果第i个数字与他上一个数字(放入环中的数字)相加是素数i+a[t-1]
		//并且该数字没有使用过b[i]=true 
		if(pd(a[t-1],i) && b[i]==true){
			a[t]=i;//存放进素数环
			b[i]=false;//标记该数已经被使用过了
			//n个数全部遍历结算
			if(t==n &&pd(a[1],a[n])){
				//判断头尾相加是否是素数
				//打印素数环
				print();
			}	
			search(t+1);//查找下一个
			b[i]=true;//不满足条件的情况下把这个i给放出来
		}
	} 
	
}

//判断x+y是否为素数
bool pd(int x,int y){
	int n;
	bool f;
	
	if(x==0){
		return true;
	}
	
	//假设是素数
	f=true;
	n=x+y;
	
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0){
			f=false;//不是素数
			break;//跳出循环
		}
	}
	
	//0,1 不是素数,2是素数
	if(f==false || n==0 || n==1){
		return false;
	}
	else
	{
		return true;
	}
}

//打印满足条件的素数环
void print(){
	total=total+1;//素数环个数加1
	cout<<total<<":";
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

/**************************************************************
	Problem: 1358
	User: admin
	Language: C++
	Result: Accepted
	Time:9 ms
	Memory:2076 kb
****************************************************************/