#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > a;
bool vis[100100];
int main() {
  int n, i, j;
  scanf("%d", &n);
  for (i = 3; i * 2 <= n; i += 2)
    if (!vis[i]) {
      vector<int> b;
      b.clear();
      for (j = i; j <= n; j += 2 * i)
        if (!vis[j]) {
          vis[j] = true;
          b.push_back(j);
        }
      for (j = b.size() - 1; j > 0; j -= 2) {
        a.push_back(pair<int, int>(b[j], b[j - 1]));
        vis[b[j]] = vis[b[j - 1]] = true;
      }
      if (b.size() & 1) {
        a.push_back(pair<int, int>(i, i * 2));
        vis[i] = vis[i * 2] = true;
      }
    }
  if (n & 1) n--;
  int flag = 0, last;
  for (i = n; i > 0; i -= 2) {
    if (vis[i]) continue;
    if (!flag)
      last = i, flag = 1;
    else
      flag = 0, a.push_back(pair<int, int>(i, last));
  }
  printf("%d\n", a.size());
  for (i = 0; i < a.size(); i++) printf("%d %d\n", a[i].first, a[i].second);
  return 0;
}
