#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=1000007;
const int INF=0x3f3f3f3f;
const int mod=1000003;
LL a[maxn], vis[maxn], k;
///素数打表数组a里面存的就是2到MAXN之间的素数
void IsPrime()
{
k=0;
for(int i=2; i<maxn; i++)
{
///用数组vis做标记数组
if(!vis[i])///数组在没有初始化时,默认为都为0,不用初始化数组的原因
{
a[k++]=i;
///i倍数不会是素数标记为1
for(int j=i+i; j<maxn; j+=i)
vis[j]=1;
}
}
}
///主函数把素数输出看的更明显
int main()
{
IsPrime();
int n;
while(~scanf("%d", &n))
{
for(int i=0; i<n; i++)
printf("%lld ", a[i]);
printf("\n");
}
return 0;
}
void Isprime()
{
int i, j;
for(i=2; i<N; i++)
{
if(v[i]==0)
{
a[k++]=i;
for(j=i+i; j<N; j+=i)
v[j]=1;
}
}
}
int Judge(long long n)
{
int i;
if(n==0 || n==1)return 0;
for(i=0; a[i]*a[i]<=n; i++)
if(n%a[i]==0)
return 0;
return 1;
}