#include<bits/stdc++.h>
using namespace std;
vector<long long> div(long long n){
vector<long long> res;
for(long long i=1;i*i<=n;i++){
if(n%i==0){
res.push_back(i);
if(i*i!=n){res.push_back(n/i);}
}
}
sort(res.begin(),res.end());
return res;
}
bool isprime(long long n){
for(long long i=2;i*i<=n;i++){
if(n%i==0){return false;}
}
return true;
}
bool korselt(vector<long long> p){
sort(p.begin(),p.end());
for(int i=1;i<p.size();i++){
if(p[i-1]==p[i]){return false;}
}
for(int i=0;i<p.size();i++){
long long md=p[i]-1;
long long v=1;
for(int j=0;j<p.size();j++){
v*=p[j]; v%=md;
}
if(v!=1){return false;}
}
return true;
}
unsigned long long xor128(){
static unsigned long long x=123456789,y=362436069,z=521288629,w=88675123;
unsigned long long t;
t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}
int main(){
long long lef=10000000;
long long rig=100000000;
vector<long long> d=div(1081080);
// long long mx=0,ml=0;
// for(long long l=1;l<=50000;l++){
// if(l%1000==0){cout << ".";}
// long long c=0;
// for(auto &nx : d){
// long long v=nx*l+1;
// if(lef<=v && v<rig && isprime(v)){c++;}
// }
// if(mx<c){
// mx=c;
// ml=l;
// }
// }
// cout << mx << " " << ml << "\n";
long long l=13668;
vector<long long> p;
for(auto &nx : d){
long long v=nx*l+1;
if(lef<=v && v<rig && isprime(v)){p.push_back(v);}
}
for(long long tr=0;;tr++){
vector<long long> cur;
for(long long i=p.size()-1;i>=p.size()-11;i--){
long long tg=xor128()%(i+1);
swap(p[tg],p[i]);
cur.push_back(p[i]);
}
if(korselt(cur)){
sort(cur.begin(),cur.end());
for(long long i=0;i<cur.size();i++){
if(i){cout << " ";}
cout << cur[i];
}
cout << "\n";
return 0;
}
}
return 0;
}