Problem:
Score : 600 points

Problem Statement

Nagase is a top student in high school. One day, she's analyzing some properties of special sets of positive integers.

She thinks that a set S = \{a_{1}, a_{2}, ..., a_{N}\} of distinct positive integers is called special if for all 1 \leq i \leq N, the gcd (greatest common divisor) of a_{i} and the sum of the remaining elements of S is not 1.

Nagase wants to find a special set of size N. However, this task is too easy, so she decided to ramp up the difficulty. Nagase challenges you to find a special set of size N such that the gcd of all elements are 1 and the elements of the set does not exceed 30000.

Constraints

3 \leq N \leq 20000

Input

Input is given from Standard Input in the following format:

N

Output

Output N space-separated integers, denoting the elements of the set S. S must satisfy the following conditions :

The elements must be distinct positive integers not exceeding 30000.

The gcd of all elements of S is 1, i.e. there does not exist an integer d > 1 that divides all elements of S.

S is a special set.

If there are multiple solutions, you may output any of them. The elements of S may be printed in any order. It is guaranteed that at least one solution exist under the given contraints.

Sample Input 1

3

Sample Output 1

2 5 63

\{2, 5, 63\} is special because gcd(2, 5 + 63) = 2, gcd(5, 2 + 63) = 5, gcd(63, 2 + 5) = 7. Also, gcd(2, 5, 63) = 1. Thus, this set satisfies all the criteria.

Note that \{2, 4, 6\} is not a valid solution because gcd(2, 4, 6) = 2 > 1.

Sample Input 2

4

Sample Output 2

2 5 20 63

\{2, 5, 20, 63\} is special because gcd(2, 5 + 20 + 63) = 2, gcd(5, 2 + 20 + 63) = 5, gcd(20, 2 + 5 + 63) = 10, gcd(63, 2 + 5 + 20) = 9. Also, gcd(2, 5, 20, 63) = 1. Thus, this set satisfies all the criteria.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define all(v) (v).begin(), (v).end()
#define resz(v, ...) (v).clear(), (v).resize(__VA_ARGS__)
#define reps(i, m, n) for(int i = (int)(m); i < (int)(n); i++)
#define rep(i, n) reps(i, 0, n)

template<class T1, class T2> void chmin(T1 &a, T2 b){if(a>b)a=b;}
template<class T1, class T2> void chmax(T1 &a, T2 b){if(a<b)a=b;}

using Pi = pair<int, int>;
using Tapris = tuple<int, int, int>;
using vint = vector<int>;

const int inf = 1LL << 55;
const int mod = 1e9 + 7;

signed main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cout << fixed << setprecision(12);

  const int MAX = 30000;

  vint is_p(MAX+1, inf);
  is_p[0] = is_p[1] = 0;
  for(int i = 2; i*i <= MAX; ++i) {
    if(is_p[i] != inf) continue;
    is_p[i] = i;
    for(int j = i+i; j <= MAX; j += i) chmin(is_p[j], i);
  }

  int n;
  cin >> n;

  if(n == 3) {
    cout << 2 << " " << 5 << " " << 63 << endl;
    return 0;
  }

  vint s;
  int num = 2;
  while(n > 1) {
    if(is_p[num] > 5 || is_p[MAX-num] > 5) {
      ++num;
      continue;
    }
    s.push_back(num);
    s.push_back(MAX-num);
    n -= 2;
    ++num;
  }
  if(n == 1) s.push_back(30000);
  sort(all(s));

  rep(i, s.size()) cout << s[i] << " \n"[i==(int)s.size()-1];

  int GCD = MAX;
  rep(i, n) {
    GCD = __gcd(GCD, s[i]);
  }
  //cout << GCD << endl;
  bool flag = true;
  int S = accumulate(all(s), 0);
  rep(i, n) {
    if(__gcd(s[i], S-s[i]) == 1) {
      //cout<<s[i]<<" "<<S-s[i]<<endl;
      flag = false;
    }
  }
  //cout << flag << endl;


  return 0;
}