Problem: We'll call a set of positive integers a beautiful if the following condition fulfills: for any prime p, if <image>, then <image>. In other words, if one number from the set is divisible by prime p, then at least half of numbers from the set is divisible by p.

Your task is to find any beautiful set, where the number of elements is equal to k and each element doesn't exceed 2k2.

Input

The first line contains integer k (10 ≤ k ≤ 5000) that shows how many numbers the required beautiful set should have.

Output

In the first line print k space-separated integers that are a beautiful set. If there are multiple such sets, you are allowed to print any of them.

Examples

Input

10


Output

16 18 24 27 36 48 54 72 108 144 

Solution (in JAVA):

Solution:
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.io.BufferedWriter;
import java.util.InputMismatchException;
import java.io.PrintStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;
import java.io.Writer;
import java.math.BigInteger;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author ogiekako
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		MyScanner in = new MyScanner(inputStream);
		MyPrintWriter out = new MyPrintWriter(outputStream);
		TaskC solver = new TaskC();
		solver.solve(1, in, out);
		out.close();
	}
}

class TaskC {
    /*
    k <= 5000
    p1, p2, ... pm
     < 2k^2
     */
    int m;
    long[] base;
    long[][] pow;
    int[] counts;
    int ptr;
    long k;
    public void solve(int testNumber, MyScanner in, MyPrintWriter out) {
        long[] res = solve(in.nextInt());
        for (int i = 0; i < res.length; i++) {
            out.printFormat("%d%c", res[i], i == res.length - 1 ? '\n' : ' ');
        }
    }
    public long[] solve(int k) {
        for (int m = 2; m <= 5; m++) {
            long[] res = solve(k, m);
//            System.err.println("res = " + Arrays.toString(res));
            if (valid(res)) return res;
        }
        throw new AssertionError();
    }
    private boolean valid(long[] res) {
        int[] cnt = new int[12];
        for (int b : new int[]{2, 3, 5, 7, 11}) {
            for (long r : res) {
                if (r == 0) return false;
                if (r % b == 0) cnt[b]++;
            }
        }
        for (int c : cnt) {
            if (0 < c && c < k / 2) {
//                System.out.println("k");
//                System.out.println(Arrays.toString(res));
//                System.out.println(Arrays.toString(cnt));
                return false;
            }
        }
        return true;
    }

    public long[] solve(int k, int m) {
        this.k = k;
        this.m = m;
        base = new long[]{2, 3, 5, 7, 11};
        pow = new long[m][30];
        for (int i = 0; i < m; i++)
            for (int j = 0; j < 30; j++) {
                pow[i][j] = j == 0 ? 1 : pow[i][j - 1] * base[i];
                if (pow[i][j] > 1e9) break;
            }
        int count = 0;
        counts = new int[m];
        long[] res = new long[k];
        ptr = 0;
        dfs(0, 1L, res);
        return res;
    }
    private void dfs(int i, long num, long[] res) {
        if (num > 1e9 || ptr >= k) return;
        if (i == m) {
            if (num <= 2 * k * k) {
                res[ptr++] = num;
            }
            return;
        }
        for (int j = 0; j < 30; j++) {
            if (pow[i][j] == 0) return;
            dfs(i + 1, num * pow[i][j], res);
        }
    }
    }

class MyScanner {
    private final InputStream in;

    public MyScanner(InputStream in) {
        this.in = in;
    }

    int bufLen;
    int bufPtr;
    byte[] buf = new byte[1024];

    public int read() {
        if (bufLen == -1)
            throw new InputMismatchException();
        if (bufPtr >= bufLen) {
            bufPtr = 0;
            try {
                bufLen = in.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (bufLen <= 0)
                return -1;
        }
        return buf[bufPtr++];
    }

    public int nextInt() {
        int c = read();
        if (c == -1) throw new NoSuchElementException();
        while (c != '-' && (c < '0' || '9' < c)) {
            c = read();
            if (c == -1) throw new NoSuchElementException();
        }
        if (c == '-') return -nextInt();
        int res = 0;
        do {
            res *= 10;
            res += c - '0';
            c = read();
        } while ('0' <= c && c <= '9');
        return res;
    }

    }

class MyPrintWriter {
    PrintWriter out;

    public MyPrintWriter(OutputStream outputStream) {
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }

    public MyPrintWriter(Writer writer) {
        out = new PrintWriter(writer);
    }

    public void close() {
        out.close();
    }

    public void printFormat(String format, Object... args) {
        out.printf(format, args);
    }

}