#include <bits/stdc++.h>
using namespace std;
long long n;
bool use[100000 + 10], b[100000 + 10];
int a[100000 + 10], Now;
int Ans;
int L[100000 + 10], R[100000 + 10], CNT = 0;
int main() {
  int Cnt = 0;
  scanf("%I64d", &n);
  for (long long i = 3; i <= n; i += 2) {
    if (b[i]) continue;
    Now = 1;
    a[1] = i;
    for (long long j = 2 * i; j <= n; j += i) {
      b[j] = false;
      if (use[j]) continue;
      a[++Now] = j;
    }
    if (Now == 1) continue;
    if (Now % 2 == 0) {
      for (int i = 1; i + 1 <= Now; i += 2) {
        Ans++;
        L[Ans] = a[i];
        use[a[i]] = true;
        R[Ans] = a[i + 1];
        use[a[i + 1]] = true;
      }
    } else {
      Ans++;
      L[Ans] = a[1];
      use[a[1]] = true;
      R[Ans] = a[3];
      use[a[3]] = true;
      for (int i = 4; i + 1 <= Now; i += 2) {
        Ans++;
        L[Ans] = a[i];
        use[a[i]] = true;
        R[Ans] = a[i + 1];
        use[a[i + 1]] = true;
      }
    }
  }
  Now = 0;
  for (long long j = 2; j <= n; j += 2) {
    b[j] = false;
    if (use[j]) continue;
    a[++Now] = j;
  }
  if (Now % 2 == 0) {
    for (int i = 1; i + 1 <= Now; i += 2) {
      Ans++;
      L[Ans] = a[i];
      use[a[i]] = true;
      R[Ans] = a[i + 1];
      use[a[i + 1]] = true;
    }
  } else {
    if (Now != 1) {
      Ans++;
      L[Ans] = a[1];
      use[a[1]] = true;
      R[Ans] = a[3];
      use[a[3]] = true;
      for (int i = 4; i + 1 <= Now; i += 2) {
        Ans++;
        L[Ans] = a[i];
        use[a[i]] = true;
        R[Ans] = a[i + 1];
        use[a[i + 1]] = true;
      }
    }
  }
  printf("%d\n", Ans);
  for (int i = 1; i <= Ans; i++) printf("%d %d\n", L[i], R[i]);
  return 0;
}
