#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}()); 
const ll mod=1000000007;
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head

int n;
int main() {
	scanf("%d",&n);
	for (int i=1;i<=n;i++) {
		int cc=1;
		int x=i;
		for (int j=2;j*j<=x;j++) while (x%j==0) x/=j,cc++;
		if (x!=1) cc++;
		printf("%d ",cc);
	}
	puts("");
}

#include<bits/stdc++.h>
using namespace std;
#define int     long long 
vector<int> primeFactors(int n) 
{ 
    vector<int>ans;
    // Print the number of 2s that divide n 
    while (n % 2 == 0) 
    { 
        ans.push_back(2); 
        n = n/2; 
    } 
  
    // n must be odd at this point. So we can skip 
    // one element (Note i = i +2) 
    for (int i = 3; i <= sqrt(n); i = i + 2) 
    { 
        // While i divides n, print i and divide n 
        while (n % i == 0) 
        { 
            ans.push_back(i);
            n = n/i; 
        } 
    } 
  
    // This condition is to handle the case when n 
    // is a prime number greater than 2 
    if (n > 2) 
        ans.push_back(n);
    return ans;
} 
int32_t main(){
    int n;cin>>n;
    vector<int>ans;
    cout<<1<<' ';
    for(int i=2;i<=n;i++){
        cout<<primeFactors(i).size()+1<<' ';
    }

    return 0;
}