http://acm.hdu.edu.cn/showproblem.php?pid=1016
#include <bits/stdc++.h>
using namespace std;
int n;
int vis[100],a[100];
bool isPrime(int x){
if(x==1) return false;
if(x==2) return true;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
int kk=0;
void dfs(int k){
//if(k>n) return;
if(k==n){
if(isPrime(a[n]+1)){
for(int i=1;i<n;i++)
cout<<a[i]<<' ';
cout<<a[n]<<endl;
}
return;
}
for(int i=2;i<=n;i++){
if(isPrime(a[k]+i)&&!vis[i]){
a[k+1]=i;
vis[i]=1;
dfs(k+1);
vis[i]=0;
}
}
}
int main(){
while(cin>>n){
memset(vis,0,sizeof(0));
memset(a,0,sizeof(0));
vis[1]=1;
a[1]=1;
cout<<"Case "<<++kk<<":"<<endl;
dfs(1);
cout<<endl;
}
}