import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static final boolean DEBUG = false;
public static long startTime = 0;
public static Scanner scanner = null;
public static PrintWriter printer = null;
/********************************************* global *************************************************/
public static final int MAX_N = 21;
public static int[] arr = new int[MAX_N];
public static boolean[] primes = new boolean[MAX_N * 2];
public static boolean[] visit = new boolean[MAX_N];
public static void main(String[] args) {
try {
System.setIn(new FileInputStream(new File("in.txt")));
System.setOut(new PrintStream(new File("out.txt")));
} catch (FileNotFoundException e) {
} finally {
scanner = null;
printer = null;
try {
scanner = new Scanner(System.in);
printer = new PrintWriter(System.out, true);
if (DEBUG) startTime = System.currentTimeMillis();
/********************************** start *************************************/
initPrimes();
int cas = 1;
while (scanner.hasNext()) {
int n = scanner.nextInt();
if (cas != 1) printer.println();
//printer.println("Case " + cas++ + ": ");printer.printf("Case %d: \n", cas++);
excute(n);
}
/*********************************** end **************************************/
if (DEBUG) showRunTime();
} finally {
scanner.close();
printer.close();
}
}
}
public static void showRunTime() {
printer.println();
printer.println("-----------------------------------------------------------");
printer.println("Runtime: " + (System.currentTimeMillis() - startTime) + "ms.");
}
/******************************************** function *******************************************/
public static void initPrimes() {
Arrays.fill(primes, true);
primes[0] = primes[1] = false;
for (int i = 2; i < MAX_N; i++) {
for (int j = i * 2; j < MAX_N * 2; j += i) {
primes[j] = false;
}
}
/*for (int i = 0; i < primes.length; i++) {printer.println(i + " : " + primes[i]);}*/
}
public static void excute(int n) {
if (n > 1 && n % 2 == 1) return; // 奇数个,根据鸽巢原理必然有两个奇数或偶数相邻,必定和为偶数不为素数arr[0] = 1;
Arrays.fill(visit, false);
visit[1] = true;
dfs(1, n);
}
public static void dfs(int id, int n) {
if (id == n) {
if (primes[1 + arr[id - 1]]) {
for (int i = 0; i < n; i++) {
if (i != 0) printer.print(" ");
printer.print(arr[i]);
}
printer.println();
}
return;
}
for (int i = 1; i <= n; i++) {
if (!visit[i] && primes[i + arr[id - 1]]) {
arr[id] = i;
visit[i] = true;
dfs(id + 1, n);
visit[i] = false;
}
}
return;
}
}