#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, a, b, c;
vector<int> tmp;
vector<pair<int, int> > v;
bool prime[100005], vis[100005];
int main() {
  scanf("%d", &n);
  for (i = 2; i <= 1000; i++) {
    if (prime[i] == 0) {
      for (j = i * i; j <= 1e5; j += i) prime[j] = true;
    }
  }
  for (i = n / 2; i >= 2; i--) {
    if (prime[i]) continue;
    tmp.clear();
    for (j = i; j <= n; j += i) {
      if (j == 2 * i or vis[j]) continue;
      tmp.push_back(j);
      vis[j] = true;
    }
    if (tmp.size() % 2) {
      tmp.push_back(2 * i);
      vis[2 * i] = true;
    }
    for (j = 0; j < tmp.size(); j += 2)
      v.push_back(make_pair(tmp[j], tmp[j + 1]));
  }
  printf("%d\n", v.size());
  for (i = 0; i < v.size(); i++) printf("%d %d\n", v[i].first, v[i].second);
  return 0;
}
