#include <bits/stdc++.h>
using namespace std;
vector<int> v;
vector<pair<int, int> > ans;
int n, i, j;
bitset<100010> viz, VIZ;
int main() {
  cin >> n;
  for (i = 3; i * i <= n; i += 2)
    if (!viz[i])
      for (j = i * i; j <= n; j += 2 * i) viz[j] = 1;
  for (i = n / 2; i >= 3; i--)
    if (i & 1)
      if (!viz[i]) {
        v.resize(0);
        for (j = i; j <= n; j += i)
          if (!VIZ[j]) v.push_back(j);
        if (v.size() & 1) v.erase(v.begin() + 1);
        int k = v.size();
        for (j = 0; j < k; j += 2) {
          VIZ[v[j]] = VIZ[v[j + 1]] = 1;
          ans.push_back({v[j], v[j + 1]});
        }
      }
  v.resize(0);
  for (j = 2; j <= n; j += 2)
    if (!VIZ[j]) v.push_back(j);
  int k = v.size();
  for (j = 1; j < k; j += 2) ans.push_back({v[j], v[j - 1]});
  cout << ans.size() << '\n';
  for (auto it : ans) cout << it.first << ' ' << it.second << '\n';
  return 0;
}
