#include<bits/stdc++.h>
#define print(x) cout << (#x) << ": " << (x) << endl
#define p1d(x) cout << (#x) << ": ["; for(auto& zz: x) cout << zz << " "; cout << "]\n"
#define p2d(x) cout << (#x) << ": \n["; for(auto& vec: x) {for(auto& v: vec) cout << v << " "; cout << ",\n";}
#define p2s(x) cout << (#x) << ": ["; for(auto& vec: x) {cout << vec << ",\n";}
#define pb push_back
#define endl "\n"
// __builtin_popcount

typedef long long ll;
using namespace std;
int static fast = [](){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0); return 0;
}();
// freopen("input.txt", "r", stdin);

ll partition(int& need, int fac, int exclude, int thres) {
    int cnt = 2;
    ll tmp = 0, init = need;
    //print(fac);
    while(need > 0) {
        tmp = fac * cnt;
        if (tmp >= thres) {
            //cout << "consume " << (init - need) << endl;
            // cout << "need = " << cpy << ", last = " << tmp << endl;
            return init-need;
        }
        if ((tmp % exclude) != 0) {
            cout << tmp << " ";
            need -= 1;
        }
        cnt += 1;
    }
    // cout << "need = " << cpy << ", last = " << tmp << endl;
    //cout << "consume " << (init - need) << endl;
    return need;
}

int main() {
    int n, n2;
    cin >> n;
    n2 = n;
    
    cout << (2*3) << " " << (3*5) << " " << (2*5) << " ";
    n -= 3;
    partition(n, 2*3, 5, 10000);
    partition(n, 2*5, 3, 10000);
    partition(n, 3*5, 2, 10000);
    partition(n, 2*3*5, 99999, 10000);
    
    // assert(acc == n2);

    // if (n < 1000) {
    //     int div3 = n / 3;
    //     partition(div3, 3*5, 2);
    //     partition(div3, 2*5, 3);
    //     partition(n-div3*2, 2*3, 5);
    // } else {
    //     int X = 100;
    //     int divX = n / X;
    //     // print(divX); // trail and run
    //     partition(divX*13, 3*5, 2);
    //     partition(divX*25, 2*5, 3);
    //     partition(n-divX*62, 2*3, 5);
    // }
    
    return 0;
}

#include<bits/stdc++.h>
#include<algorithm>
#include<cmath>
#include<climits>
using namespace std;
typedef long long int lli;
typedef vector<int> vi;
typedef vector<long long int> vlli;
typedef pair<int,int> pii;
typedef pair<long long int,long long int> plli;
typedef vector< vi > vvi ;
typedef vector< vlli > vvlli  ;
#define fi(i,a,b) for(int i=a;i<=b;i++)
#define flli(i,a,b) for(long long int i=a;i<=b;i++)
#define bi(i,a,b) for(int i=a;i>=b;i--)
#define blli(i,a,b) for(long long int i=a;i>=b;i--)
#define fast ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
#define all(x) x.begin(),x.end()
#define sz(x) x.size()
#define pi 2*acos(0.0)
#define pb push_back
#define tr(v,it) for(decltype(v.begin()) it=v.begin();it!=v.end();it++)
#define present(v,num) (v.find(num)!=v.end())
#define cpresent(v,num) (find(v.begin(),v.end(),num)!=v.end())
#define pq priority_queue
#define mp make_pair
const int inf=INT_MAX;
const lli INF =LLONG_MAX;
const lli mod = 1e9+7;
int main() {
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fast;
    lli n;cin>>n;
    vlli a;
    lli idx=1;
    set<lli> vals;
    flli(i,1,n-2)
    {
    	lli val=6*idx;
    	if(val<=10000)
    	{
    		vals.insert(val);
    		idx++;
    	}
    }
    idx=1;
    flli(i,1,n-2)
    {
    	lli val=10*idx;
    	lli szvals=sz(vals);
    	if(val==110 || val==165)idx++;
    	if(val<=10000 && szvals<n-2 && val!=110 && val!=165)
    	{
    		vals.insert(val);
    		idx++;
    	}
    }
    idx=1;
    flli(i,1,n-2)
    {
    	lli val=15*idx;
    	lli szvals=sz(vals);
    	if(val==110 || val==165)idx++;
    	if(val<=10000 && szvals<n-2 && val!=110 && val!=165)
    	{
    		vals.insert(val);
    		idx++;
    	}
    }
    a.pb(2*5*11);
    a.pb(3*5*11);
    tr(vals,it)a.pb(*it);
    lli sza=sz(a);
    assert(sza==n);
    flli(i,0,n-1)cout<<a[i]<<" ";
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
    return 0;
}