#include <bits/stdc++.h>
using namespace std;
const int inf = 999999999;
vector<pair<int, int> > ans;
vector<int> a[100010], rest;
bool used[100010];
int n;
int main() {
  scanf("%d", &n);
  for (int i = 3; i <= n; i++) {
    for (int j = i; j <= n; j += i) {
      if (!used[j]) a[i].push_back(j), used[j] = true;
    }
  }
  rest.push_back(2);
  for (int i = 3; i <= n; i++) {
    if (a[i].size() < 2) {
      if (i == 4 && a[i].size() == 1) rest.push_back(4);
      continue;
    }
    int j = 0;
    if (a[i].size() & 1)
      ans.push_back(make_pair(a[i][0], a[i][2])), rest.push_back(a[i][1]),
          j += 3;
    for (; j + 1 < a[i].size(); j += 2) {
      ans.push_back(make_pair(a[i][j], a[i][j + 1]));
    }
  }
  for (int i = 0; i + 1 < rest.size(); i += 2) {
    ans.push_back(make_pair(rest[i], rest[i + 1]));
  }
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); i++) {
    printf("%d %d\n", ans[i].first, ans[i].second);
  }
  return 0;
}
