#include<bits/stdc++.h>
using namespace std;
const int maxn =650005;
int prime[maxn];//第 i个素数
bool is_prime[maxn+1];//is_prime[i]为true表示素数
int sieve(int n)
{
int p=0;
for(int i=0; i<=n; i++)
is_prime[i]=true;
is_prime[0]=is_prime[1]=false;
for(int i=2; i<=n; i++)
{
if(is_prime[i])
{
prime[++p]=i;
for(int j=2*i; j<=n; j+=i)//去掉i的倍数的数
is_prime[j]=false;
}
}
return p;//返回n以内素数的个数
}
int main()
{
int n;
scanf("%d",&n);
int t=sieve(n);
printf("%d\n",t);//n内素数的个数
for(int i=1; i<=t; i++)
printf("%d ",prime[i]);//n内所有的素数
cout<<endl;
return 0;
}