#include <bits/stdc++.h>
using namespace std;
const long long INF = 2e9;
const int maxn = 200000 + 100;
vector<int> g[maxn], d;
vector<pair<int, int> > ans;
int bp[maxn];
int main() {
  int n;
  cin >> n;
  for (int i = 2; i / 2 <= n; i++) {
    if (bp[i] != 0) continue;
    bp[i] = i;
    for (int j = i + i; j <= n; j += i) bp[j] = i;
  }
  for (int i = 2; i <= n; i++) {
    if (bp[i] != 0) g[bp[i]].push_back(i);
  }
  for (int i = 2; i <= n / 2; i++) {
    if (g[i].size() % 2 == 0) {
      if (g[i].size() == 0) continue;
      for (int j = 0; j < g[i].size(); j += 2)
        ans.push_back({g[i][j], g[i][j + 1]});
      continue;
    }
    d.push_back(g[i][1]);
    ans.push_back({g[i][0], g[i][2]});
    for (int j = 3; j < g[i].size(); j += 2)
      ans.push_back({g[i][j], g[i][j + 1]});
  }
  for (int i = 0; i + 1 < d.size(); i += 2) ans.push_back({d[i], d[i + 1]});
  cout << ans.size() << endl;
  for (auto i : ans) cout << i.first << ' ' << i.second << endl;
}
