#include <bits/stdc++.h>
using namespace std;
int n;
vector<bool> used(300002, false);
vector<bool> prime(300002, true);
set<int> p[300002];
set<int> prost;
void initialization() { cin >> n; }
int res;
void solve() {
  prime[1] = false;
  for (int i = 2; i * i <= n; ++i) {
    if (prime[i])
      for (int j = i * i; j <= n; j += i) prime[j] = false;
  }
  for (int i = 2; i <= n / 2; ++i) {
    if (prime[i]) prost.insert(i);
  }
  for (auto it = prost.rbegin(); it != prost.rend(); ++it) {
    int pr = *it;
    for (int i = pr; i <= n; i += pr)
      if (!used[i]) {
        p[pr].insert(i);
        used[i] = true;
      }
    if (pr != 2 && p[pr].size() % 2 == 1) {
      p[pr].erase(2 * pr);
      p[2].insert(2 * pr);
    }
    if (pr == 2 && p[pr].size() % 2 == 1) p[pr].erase(2 * pr);
    res += p[pr].size() / 2;
  }
}
void print() {
  cout << res << endl;
  for (auto it = prost.begin(); it != prost.end(); ++it) {
    auto cur = p[*it].begin();
    while (cur != p[*it].end()) {
      cout << *cur << ' ';
      ++cur;
      cout << *cur << endl;
      ++cur;
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  initialization();
  solve();
  print();
  return 0;
}
