#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int TMXN = 1e6 * 4 + 1;
const long long INFL = 1e18;
const int MOD = 1e9 + 7;
int n;
int p[N], used[N];
vector<pair<int, int> > ar;
int cnt;
int main() {
  scanf("%d", &n);
  for (int i = 3; i <= n; i += 2) {
    if (!p[i]) {
      vector<int> v;
      for (int j = i; j <= n; j += i) {
        p[j] = 1;
        if (!used[j]) {
          v.push_back(j);
        }
      }
      if (v.size() % 2) {
        swap(v[0], v[1]);
        for (int j = 1; j < v.size() - 1; j += 2) {
          ar.push_back(make_pair(v[j], v[j + 1]));
          used[v[j]] = 1;
          used[v[j + 1]] = 1;
        }
      } else {
        for (int j = 1; j < v.size(); j += 2) {
          ar.push_back(make_pair(v[j], v[j - 1]));
          used[v[j]] = 1;
          used[v[j - 1]] = 1;
        }
      }
    }
  }
  vector<int> second;
  for (int i = 2; i <= n; i += 2) {
    if (!used[i]) {
      second.push_back(i);
    }
  }
  for (int i = 1; i < second.size(); i += 2) {
    ar.push_back(make_pair(second[i], second[i - 1]));
  }
  cout << ar.size() << '\n';
  for (int i = 0; i < ar.size(); i++) {
    cout << ar[i].first << ' ' << ar[i].second << '\n';
  }
  return 0;
}
