#include <bits/stdc++.h>
using namespace std;
string add(string a, string b) {
  int alen = a.length(), blen = b.length();
  if (alen < blen)
    a = string(blen - alen, '0') + a, alen = blen;
  else
    b = string(alen - blen, '0') + b, blen = alen;
  string ans;
  int carry = 0;
  for (int i = alen - 1; i >= 0; i--) {
    int d = (a[i] - '0') + (b[i] - '0') + carry;
    ans += (d % 10 + '0');
    carry = d / 10;
  }
  if (carry > 0) ans += (carry + '0');
  reverse(ans.begin(), ans.end());
  return ans;
}
string mul(const string &a, char c) {
  int alen = a.length();
  string ans;
  int carry = 0;
  for (int i = alen - 1; i >= 0; i--) {
    int b = (a[i] - '0') * (c - '0') + carry;
    ans += (b % 10 + '0');
    carry = b / 10;
  }
  if (carry > 0) ans += (carry + '0');
  reverse(ans.begin(), ans.end());
  return ans;
}
string mul(const string &a, const string &b) {
  int blen = b.length();
  string ans = "0";
  for (int i = 0; i < blen; i++)
    ans = add(ans, mul(a, b[i]) + string(blen - i - 1, '0'));
  return ans;
}
int main() {
  int n;
  cin >> n;
  if (n == 2) {
    cout << -1 << endl;
    return 0;
  }
  const int Ne = 300;
  static bool er[Ne];
  er[0] = er[1] = true;
  for (int i = 2; i * i < Ne; i++)
    if (!er[i])
      for (int j = i * i; j < Ne; j += i) er[j] = true;
  vector<int> p;
  for (int i = 0; i < Ne; i++)
    if (!er[i]) p.push_back(i);
  string prime[100];
  for (int i = 0; i < n; i++) {
    char s[32];
    sprintf(s, "%d", p[i]);
    prime[i] = s;
  }
  for (int i = 0; i < n; i++) {
    string ans = "1";
    for (int j = 0; j < n; j++)
      if (i != j) ans = mul(ans, prime[j]);
    cout << ans << endl;
  }
  return 0;
}
