#include <bits/stdc++.h>
using namespace std;
int prim[100000 + 10], vit[100000 + 10], n, cnt;
void init() {
  memset(vit, 0, sizeof(vit));
  cnt = 0;
  for (int i = 2; i <= 100000; i++)
    if (!vit[i]) {
      prim[cnt++] = i;
      for (int j = i; j <= 100000; j += i) vit[j] = 1;
    }
}
int main() {
  init();
  while (cin >> n) {
    memset(vit, 0, sizeof(vit));
    vector<pair<int, int> > ko;
    vector<int> tmp;
    for (int i = cnt - 1; i >= 0; i--) {
      tmp.clear();
      for (int j = prim[i]; j <= n; j += prim[i])
        if (!vit[j]) tmp.push_back(j);
      if (tmp.size() & 1) swap(tmp[1], tmp[tmp.size() - 1]);
      for (int j = 0; j < (int)(tmp.size()) - 1; j += 2) {
        ko.push_back(make_pair(tmp[j], tmp[j + 1]));
        vit[tmp[j]] = vit[tmp[j + 1]] = 1;
      }
    }
    cout << ko.size() << endl;
    for (int i = 0; i < ko.size(); i++)
      cout << ko[i].first << " " << ko[i].second << endl;
  }
}
