//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define endl '\n'


llo n,m;
llo it[501][501];
llo ans[501];
llo ans2[501];
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	llo cur=1;
	llo ind=0;
	for(int i=1;i<=n;i++){
		if(i==cur){
			ind++;
			cur*=2;
		}
		cout<<ind<<" ";
	}
	cout<<endl;







 
	return 0;
}
#include <bits/stdc++.h>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
#define rep(i, n) for(int i=0;i<n;i++)
#define all(i, v) for(auto& i : v)
using namespace std;

vector<int> div(int n){
    vector<int> v;
    for(int i=1;i*i<=n;i++){
        if(n % i == 0){
            if(n != i * i) v.pb(n / i);
            v.pb(i);
        }
    }
    return v;
}

int main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    vector<int> ans(n + 1, 0);
    for(int i=1;i<=n;i++){
        vector<int> v(60, 1);
        all(e, div(i)) v[ans[e]] = 0;
        for(int j=1;j<=60;j++){
            if(v[j]){
                ans[i] = j;
                break;
            }
        }
    }
    rep(i, n) cout << ans[i + 1] << " "; 
    return 0;
}


