#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  bool prime[n + 1];
  int ref = n;
  for (int i = 0; i <= ref; i++) prime[i] = true;
  int prev = -1, count = 0;
  vector<pair<int, int> > ans;
  for (int i = 3; i <= ref / 2; i++) {
    prev = -1;
    vector<int> tmp;
    if (prime[i]) {
      for (int j = i; j <= ref; j += i) {
        if (prime[j]) {
          tmp.push_back(j);
        }
      }
      int siz = tmp.size();
      if (siz % 2 == 0) {
        for (int j = 0; j < siz; j += 2) {
          ans.push_back(make_pair(tmp[j], tmp[j + 1]));
          prime[tmp[j]] = false;
          prime[tmp[j + 1]] = false;
        }
      }
      if (siz % 2 == 1 && siz > 1) {
        ans.push_back(make_pair(tmp[0], tmp[2]));
        prime[tmp[0]] = false;
        prime[tmp[2]] = false;
        for (int j = 3; j < siz; j += 2) {
          ans.push_back(make_pair(tmp[j], tmp[j + 1]));
          prime[tmp[j]] = false;
          prime[tmp[j + 1]] = false;
        }
      }
    }
  }
  vector<int> tmp;
  for (int i = 2; i <= n; i += 2)
    if (prime[i]) tmp.push_back(i);
  for (int j = 0; j < (int)tmp.size() - 1; j += 2)
    ans.push_back(make_pair(tmp[j], tmp[j + 1]));
  cout << (int)ans.size() << endl;
  for (int u = 0; u < (int)ans.size(); u++)
    cout << ans[u].first << " " << ans[u].second << endl;
}
