#include <bits/stdc++.h>
using namespace std;
const int P = 8, prime[P] = {2, 3, 5, 7, 11, 13, 17, 19};
int n, lim, p, sp1, sp2, sp3;
vector<int> v[1 << P];
void dfs(int x, int b, int i) {
  if (i == p) {
    v[b].push_back(x);
    return;
  }
  dfs(x, b, i + 1);
  b |= 1 << i;
  for (x *= prime[i]; x <= lim; x *= prime[i]) dfs(x, b, i + 1);
}
bool dfs3(int a, int b, int c, int i) {
  if (a >= lim || b >= lim || c >= lim) return false;
  if (i == p) {
    if (a == b || b == c || c == a) return false;
    sp1 = a;
    sp2 = b;
    sp3 = c;
    return true;
  }
  int pp = prime[i];
  if (dfs3(a * pp, b * pp, c, i + 1)) return true;
  if (dfs3(a * pp, b, c * pp, i + 1)) return true;
  if (dfs3(a, b * pp, c * pp, i + 1)) return true;
  return false;
}
int main() {
  scanf("%d", &n);
  lim = n * n * 2;
  for (p = 3; p <= P; p++) {
    for (int i = 0; i < (1 << p); i++) v[i].clear();
    dfs(1, 0, 0);
    vector<int> ans;
    if (n % 2 == 1) {
      dfs3(1, 1, 1, 0);
      ans.push_back(sp1);
      ans.push_back(sp2);
      ans.push_back(sp3);
    }
    for (int i = 0; i < (1 << p); i++) {
      vector<int> &v1 = v[i], &v2 = v[i ^ ((1 << p) - 1)];
      while (!v1.empty() && !v2.empty()) {
        int a1 = v1.back(), a2 = v2.back();
        if (a1 == sp1 || a1 == sp2 || a1 == sp3) {
          v1.pop_back();
          continue;
        }
        if (a2 == sp1 || a2 == sp2 || a2 == sp3) {
          v2.pop_back();
          continue;
        }
        ans.push_back(a1);
        ans.push_back(a2);
        v1.pop_back();
        v2.pop_back();
        if (ans.size() == n) {
          for (int a : ans) printf("%d ", a);
          return 0;
        }
      }
    }
  }
}
