#include <bits/stdc++.h>
using namespace std;
int n, uz[100005], nr;
vector<pair<int, int> > ans;
vector<int> H;
int main() {
  cin >> n;
  for (int i = 3; i <= n; i++) {
    H.clear();
    if (uz[i] || i % 2 == 0) continue;
    for (int j = i; j <= n; j += i) {
      if (uz[j]) continue;
      uz[j] = 1;
      H.push_back(j);
    }
    reverse(H.begin(), H.end());
    if (H.size() == 1) continue;
    if (H.size() % 2 && i <= n / 2) {
      uz[i * 2] = 0;
      H.pop_back();
      H.pop_back();
      H.push_back(i);
    }
    while (!H.empty()) {
      ans.push_back({H.back(), H[H.size() - 2]});
      H.pop_back();
      H.pop_back();
    }
  }
  H.clear();
  for (int i = 2; i <= n; i += 2) {
    if (uz[i]) continue;
    H.push_back(i);
  }
  if (H.size() % 2) H.pop_back();
  while (!H.empty()) {
    ans.push_back({H.back(), H[H.size() - 2]});
    H.pop_back();
    H.pop_back();
  }
  cout << ans.size() << '\n';
  for (auto it : ans) cout << it.first << ' ' << it.second << '\n';
  return 0;
}
