#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > ans;
void push(int x) {
  if (ans.empty())
    ans.push_back(pair<int, int>(x, 0));
  else if (ans.back().second == 0)
    ans.back().second = x;
  else
    ans.push_back(pair<int, int>(x, 0));
}
bool check[111111];
int main() {
  int n;
  cin >> n;
  vector<int> rest;
  for (int i = 2; i <= n; i <<= 1) {
    rest.push_back(i);
    check[i] = true;
  }
  for (int i = 3; i <= n / 2; i++) {
    if (!check[i]) {
      vector<int> now;
      for (int j = i; j <= n; j += i) {
        if (j == 2 * i)
          check[j] = true;
        else if (!check[j]) {
          now.push_back(j);
          check[j] = true;
        }
      }
      now.push_back(2 * i);
      if (now.size() % 2) {
        rest.push_back(now.back());
        now.pop_back();
      }
      for (int i = 0; i < now.size(); i++) push(now[i]);
    }
  }
  if (rest.size() % 2) rest.pop_back();
  for (int i = 0; i < rest.size(); i++) push(rest[i]);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].first << ' ' << ans[i].second << endl;
}
