#include<bits/stdc++.h>
#include<cstring>
#define ll long long
#define lowbit(x) (x&(-x))
#define rep(a,b) for(int i=a;i<=b;i++)
#define rrep(a,b) for(int j=a;j<=b;j++)
#define pre(a,b) for(int i=a;i>=b;i--)
#define ppre(a,b) for(int j=a;j>=b;j--)
#define ac puts("Yes")
#define wa puts("No")
#define pb push_back
#define PII pair<int,int>
using namespace std;
const int mod1=998244353;
const int mod2=1e9+7;
const int N=2e5+10;
bool st[N]={1,1};
ll a[N],k;
void ol(){
for(int i=2;i<=100010;i++){
if(!st[i])a[++k]=i;
for(int j=1;j<=k;j++){
if(i*a[j]>100010)break;
st[i*a[j]]=1;
if(i%a[j]==0)break;
}
}
}
ll b[N],id[N];
int main(){
ol();
int n,k;
cin>>n;
if(n<3)k=1;
else k=2;
cout<<k<<endl;
cout<<1<<" ";
rep(3,n+1)
if(!st[i])cout<<1<<" ";
else cout<<2<<" ";
return 0;
}
1542A - Odd Set | 1567B - MEXor Mixup |
669A - Little Artem and Presents | 691B - s-palindrome |
851A - Arpa and a research in Mexican wave | 811A - Vladik and Courtesy |
1006B - Polycarp's Practice | 1422A - Fence |
21D - Traveling Graph | 1559B - Mocha and Red and Blue |
1579C - Ticks | 268B - Buttons |
898A - Rounding | 1372B - Omkar and Last Class of Math |
1025D - Recovering BST | 439A - Devu the Singer and Churu the Joker |
1323A - Even Subset Sum Problem | 1095A - Repeating Cipher |
630F - Selection of Personnel | 630K - Indivisibility |
20B - Equation | 600B - Queries about less or equal elements |
1015A - Points in Segments | 1593B - Make it Divisible by 25 |
680C - Bear and Prime 100 | 1300A - Non-zero |
1475E - Advertising Agency | 1345B - Card Constructions |
1077B - Disturbed People | 653A - Bear and Three Balls |