# Kate and imperfection

Kate has a set $S$ of $n$ integers $\{1, \dots, n\}$.

She thinks that imperfection of a subset $M \subseteq S$ is equal to the maximum of $gcd(a, b)$ over all pairs $(a, b)$ such that both $a$ and $b$ are in $M$ and $a \neq b$.

Kate is a very neat girl and for each $k \in \{2, \dots, n\}$ she wants to find a subset that has the smallest imperfection among all subsets in $S$ of size $k$. There can be more than one subset with the smallest imperfection and the same size, but you don’t need to worry about it. Kate wants to find all the subsets herself, but she needs your help to find the smallest possible imperfection for each size $k$, will name it $I_k$.

Please, help Kate to find $I_2$, $I_3$, …, $I_n$.

Input

The first and only line in the input consists of only one integer $n$ ($2\le n \le 5 \cdot 10^5$)  — the size of the given set $S$.

Output

Output contains only one line that includes $n – 1$ integers: $I_2$, $I_3$, …, $I_n$.

Examples

input

2


output

1

input

3


output

1 1

Note

First sample: answer is 1, because $gcd(1, 2) = 1$.

Second sample: there are subsets of $S$ with sizes $2, 3$ with imperfection equal to 1. For example, $\{2,3\}$ and $\{1, 2, 3\}$.

Solution:

#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;}

int n,pr[501000],cnt[501000],ans[501000];
int main() {
scanf("%d",&n);
for (int i=2;i<=n;i++) if (!pr[i]) {
for (int j=i;j<=n;j+=i) if (pr[j]==0) pr[j]=j/i;
}
pr[1]=1;
rep(i,1,n+1) cnt[pr[i]]++;
int x=0;
rep(i,1,n+1) {
rep(j,0,cnt[i]) ans[++x]=i;
}
rep(i,2,n+1) printf("%d ",ans[i]); puts("");
}