#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
const int M = 1e6 + 10;
const long long mod = 1e9 + 7;
const double PI = acos(-1);
vector<int> vc;
vector<pair<int, int> > ans;
bool vis[N];
vector<int> now;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 3; i <= n / 2; ++i) {
    now.clear();
    if (vis[i]) continue;
    for (int j = i; j <= n; j += i)
      if (!vis[j]) {
        now.push_back(j);
        vis[j] = true;
      }
    if (now.size() & 1) {
      vc.push_back(now[1]);
      if (now.size() < 3) continue;
      ans.push_back({now[0], now[2]});
      for (int i = 5; i <= now.size(); i += 2)
        ans.push_back({now[i - 2], now[i - 1]});
    } else {
      for (int i = 2; i <= now.size(); i += 2)
        ans.push_back({now[i - 2], now[i - 1]});
    }
  }
  for (int i = 2; i <= n; ++i)
    if (!vis[i] && !(i & 1)) vc.push_back(i);
  for (int i = 2; i <= vc.size(); i += 2) ans.push_back({vc[i - 2], vc[i - 1]});
  printf("%d\n", ans.size());
  for (auto it : ans) printf("%d %d\n", it.first, it.second);
  return 0;
}
