#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int isnotprime[MAXN];
int bo[MAXN];
int a[MAXN];
int m1[MAXN], m2[MAXN];
void swap(int &a, int &b) {
  int t = a;
  a = b;
  b = a;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 2; i * i <= n; ++i)
    if (!isnotprime[i])
      for (int j = i * i; j < n; j += i) isnotprime[j] = 1;
  int m = 0;
  for (int i = n / 2; i > 1; --i) {
    if (isnotprime[i]) continue;
    int num = 0;
    for (int j = i; j <= n; j += i)
      if (!bo[j]) a[++num] = j;
    if (num & 1) swap(a[2], a[num]);
    for (int j = 1; j < num; j += 2) {
      m1[m] = a[j];
      m2[m] = a[j + 1];
      ++m;
      bo[a[j]] = bo[a[j + 1]] = 1;
    }
  }
  printf("%d\n", m);
  for (int i = 0; i < m; ++i) printf("%d %d\n", m1[i], m2[i]);
  return 0;
}
