#include<bits/stdc++.h>
#include<time.h>
bool can[20];
int key(int,int,int*,int*);
/*key(填格子,最多数量,环,count)*/
bool soup(int); //素数
int main(){
//int start=clock();
int num[20];
int count=0;
int n;
scanf("%d",&n);
//printf("2:%d 5:%d 15:%d\n",soup(2),soup(5),soup(15));
key(1,n,num,&count);
if(count==0) printf("-1");
return 0;
}
int key(int x,int n,int* num,int* count){
/*if(clock()-start>=900){
printf("-1");
exit(1);
}*/
//printf("%d",x);
if(x>n){
//printf("%d\n",x);
/*
for(int i=1;i<=n;i++){
int flag=0;
for(int j=1;j<=n;j++){
if(num[i]==num[j]) flag++;
}
//printf("%d\n",flag);
if(flag>1) return 0;
}*/
(*count)++;
for(int i=1;i<=n;i++){
printf("%d ",num[i]);
}
printf("\n");
return 0;
}
//printf("%d",x);
for(int i=1;i<=n;i++){
if(x==1){ //首
//printf("a\n");
num[x]=i;
can[i]=1;
key(x+1,n,num,count);
can[i]=0;
}
else if(x==n&&(!can[i])){ //尾
//printf("b\n");
if(soup(i+num[x-1])&&soup(i+num[1])){
//printf("_b\n");
num[x]=i;
can[i]=1;
key(x+1,n,num,count);
can[i]=0;
}
}
else{ //身
//printf("c\n");
if(soup(i+num[x-1])&&(!can[i])){
num[x]=i;
can[i]=1;
key(x+1,n,num,count);
can[i]=0;
}
}
}
}
bool soup(int n){
for(int i=2;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}