#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long neg = 1, num = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') neg = -1;
  for (; isdigit(c); c = getchar()) num = (num << 1) + (num << 3) + c - '0';
  return neg * num;
}
long long n, tot, cnt[500010], vis[500010], pri[500010], d[500010];
vector<long long> G[500010];
void sieve() {
  vis[1] = d[1] = 1;
  for (long long i = 2; i <= n; i++) {
    if (!vis[i]) pri[++tot] = d[i] = i;
    for (long long j = 1; j <= tot && i * pri[j] <= n; j++) {
      vis[i * pri[j]] = 1;
      d[i * pri[j]] = pri[j];
      if (i % pri[j] == 0) break;
    }
  }
}
signed main() {
  n = read();
  long long sum = 1, i = 1;
  sieve();
  for (long long i = 1; i <= n; i++) vis[i] = 0;
  for (long long i = 2; i <= n; i++) d[i] = i / d[i];
  sort(d + 1, d + n + 1);
  for (long long i = 2; i <= n; i++) printf("%d ", d[i]);
  return 0;
}
