#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
vector<ll> sieve(ll n)
{
vector<bool> prime(n + 1, true);
prime[0] = false;
prime[1] = false;
for (ll i = 2; i*i <= n; i++) {
// If prime[i] is not changed, then it
// is a prime
if (prime[i]) {
// Update all multiples of p
for (ll j = i * i; j <= n; j += i)
prime[j] = false;
}
}
// push all the primes into the vector ans
vector<ll> ans;
for (ll i = 0; i < n; i++)
if (prime[i])
ans.push_back(i);
return ans;
}
int main() {
ll n;
cin>>n;
vector<ll>ans = sieve(n);
for(int x:ans)cout<<x<<" ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCnZlY3RvcjxsbD4gc2lldmUobGwgbikgCnsgCgl2ZWN0b3I8Ym9vbD4gcHJpbWUobiArIDEsIHRydWUpOyAKIAlwcmltZVswXSA9IGZhbHNlOyAKCXByaW1lWzFdID0gZmFsc2U7IAogCWZvciAobGwgaSA9IDI7IGkqaSA8PSBuOyBpKyspIHsgCiAKCQkvLyBJZiBwcmltZVtpXSBpcyBub3QgY2hhbmdlZCwgdGhlbiBpdCAKCQkvLyBpcyBhIHByaW1lIAoJCWlmIChwcmltZVtpXSkgeyAKIAoJCQkvLyBVcGRhdGUgYWxsIG11bHRpcGxlcyBvZiBwIAoJCQlmb3IgKGxsIGogPSBpICogaTsgaiA8PSBuOyBqICs9IGkpIAoJCQkJcHJpbWVbal0gPSBmYWxzZTsgCgkJfSAKCX0gCiAKCS8vIHB1c2ggYWxsIHRoZSBwcmltZXMgaW50byB0aGUgdmVjdG9yIGFucyAKCXZlY3RvcjxsbD4gYW5zOyAKCWZvciAobGwgaSA9IDA7IGkgPCBuOyBpKyspIAoJCWlmIChwcmltZVtpXSkgCgkJCWFucy5wdXNoX2JhY2soaSk7IAoJcmV0dXJuIGFuczsgCn0gCgoKaW50IG1haW4oKSB7CglsbCBuOwoJY2luPj5uOwoJdmVjdG9yPGxsPmFucyA9IHNpZXZlKG4pOwoJZm9yKGludCB4OmFucyljb3V0PDx4PDwiICI7CglyZXR1cm4gMDsKfQ==