#include <bits/stdc++.h>
long f[6005][505] = {0};
long col = 0;
long a[6005] = {0};
long value[6005] = {0};
long last[6005][505] = {0};
long check(long x) {
  long i;
  for (i = 2; i * i <= x; i++)
    if (x % i == 0) return 0;
  return 1;
}
int main() {
  long n, i;
  long sum = 0;
  long max = 0, j;
  long m;
  scanf("%ld", &n);
  sum = n * (n + 1) / 2;
  if (sum % 2 == 0) {
    m = n;
    for (i = 1; i <= n; i++) value[i] = i;
  loop:;
    for (max = 2;; max++)
      if (check(max) && check(sum - max)) break;
  } else {
    if (check(sum)) {
      for (i = 1; i <= n; i++) printf("1 ");
      return 0;
    } else if (check(sum - 2)) {
      for (i = 1; i <= n; i++) printf("%ld ", 1 + (i == 2));
      return 0;
    } else {
      sum -= 3;
      a[3] = ++col;
      m = n - 1;
      for (i = 1; i <= n; i++)
        if (i != 3) value[i - (i > 3)] = i;
      goto loop;
    }
  }
  f[0][0] = 1;
  for (i = 1; i <= m; i++) {
    for (j = 0; j <= max; j++) {
      if (f[i - 1][j]) {
        f[i][j] = 1;
        last[i][j] = 0;
      } else if (j >= value[i])
        if (f[i - 1][j - value[i]]) {
          f[i][j] = 1;
          last[i][j] = 1;
        }
    }
  }
  col++;
  for (i = m, j = max; i >= 1; i--) {
    if (last[i][j]) {
      a[value[i]] = col;
      j -= value[i];
    }
  }
  col++;
  for (i = 1; i <= n; i++)
    if (a[i] == 0) a[i] = col;
  for (i = 1; i <= n; i++) printf("%ld ", a[i]);
  return 0;
}
