#include <bits/stdc++.h>
const int N = 1000005;
bool isp[N], ud[N];
int p[N], cnt, o1[N], o2[N], q[N], n, tp[N], cn, cnum;
inline void pri() {
  register long long x;
  for (int i = 2; i <= n; i++) {
    if (!isp[i]) p[++cnt] = i;
    for (int j = 1; (x = 1ll * p[j] * i) <= N && j <= cnt; j++) {
      isp[x] = true;
      if (i % p[j] == 0) break;
    }
  }
}
int main() {
  scanf("%d", &n), pri();
  for (register int i = cnt, top; i; --i) {
    top = 0;
    for (register int j = p[i]; j <= n; j += p[i])
      if (!ud[j]) q[++top] = j, ud[j] = 1;
    if (top & 1) {
      if (p[i] * 2 > n) continue;
      q[2] = q[1], tp[++cn] = p[i] << 1;
      for (register int i = 2; i <= top; i += 2)
        o1[++cnum] = q[i], o2[cnum] = q[i + 1];
    } else
      for (register int i = 1; i <= top; i += 2)
        o1[++cnum] = q[i], o2[cnum] = q[i + 1];
  }
  for (register int i = 1; i + 1 <= cn; i += 2)
    o1[++cnum] = tp[i], o2[cnum] = tp[i + 1];
  printf("%d\n", cnum);
  for (register int i = 1; i <= cnum; ++i) printf("%d %d\n", o1[i], o2[i]);
  return 0;
}
