#include <bits/stdc++.h>
long n, vis[100005] = {0}, t[100005] = {0};
int main() {
  long i, j, ans = 0, k;
  scanf("%ld", &n);
  if (n & 1)
    i = n;
  else
    i = n - 1;
  for (; i > 1; i -= 2)
    if (!vis[i]) {
      if (i * 2 > n) {
        for (j = 2; j * j <= n; j++)
          if (i % j == 0) break;
        if (i % j == 0 && i != j) {
          for (k = 1;; k++)
            if (!vis[k * j]) break;
          vis[k * j] = 1;
          vis[i] = 1;
          t[i] = k * j;
          t[k * j] = i;
          ans++;
        }
      } else {
        vis[i * 2] = 1;
        vis[i] = 1;
        t[i] = i * 2;
        t[i * 2] = i;
        ans++;
      }
    }
  k = 0;
  for (i = 2; i <= n; i += 2)
    if (!vis[i]) {
      if (k) {
        ans++;
        t[i] = k;
        t[k] = i;
        vis[i] = vis[k] = 1;
        k = 0;
      } else
        k = i;
    }
  printf("%ld\n", ans);
  memset(vis, 0, sizeof(vis));
  for (i = 2; i <= n; i++)
    if (!vis[i] && t[i]) {
      printf("%ld %ld\n", i, t[i]);
      vis[t[i]] = 1;
      ans--;
      if (!ans) break;
    }
  return 0;
}
