#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  scanf("%d", &n);
  bool isprime[100001];
  for (int i = 2; i <= n; i++) isprime[i] = true;
  for (int i = 2; i <= n; i++) {
    for (int j = 2 * i; j <= n; j += i) {
      isprime[j] = false;
    }
  }
  set<int> s;
  vector<int> p;
  for (int i = 2; i <= n; i++)
    if (!isprime[i] || i <= n / 2) s.insert(i);
  for (int i = 3; i <= n / 2; i++) {
    if (isprime[i]) {
      set<int> u;
      for (int j = i; j <= n; j += i)
        if (s.find(j) != s.end()) u.insert(j);
      if (u.size() % 2 == 0)
        for (set<int>::iterator it = u.begin(); it != u.end(); ++it) {
          p.push_back(*it);
          s.erase(*it);
        }
      else
        for (set<int>::iterator it = u.begin(); it != u.end(); ++it)
          if ((*it) != 2 * i) {
            p.push_back(*it);
            s.erase(*it);
          }
    }
  }
  for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {
    p.push_back(*it);
  }
  printf("%d\n", p.size() / 2);
  for (int i = 0; i < p.size() - p.size() % 2; i += 2) {
    printf("%d %d\n", p[i], p[i + 1]);
  }
}
