#include <bits/stdc++.h>
using namespace std;
int vis[100005];
int shu[50005];
vector<int> chu;
int n;
int su(int m) {
  for (int i = 2; i <= sqrt(m); i++)
    if (m % i == 0) return 0;
  return 1;
}
long long ans;
int main() {
  scanf("%d", &n);
  if (n <= 2) {
    cout << 0 << endl;
    return 0;
  }
  int temp = 1;
  for (int i = 3; i <= n / 2; i++) {
    if (su(i) == 1) {
      shu[temp] = i;
      temp++;
    }
  }
  temp--;
  for (int i = temp; i >= 1; i--) {
    int ge = 0;
    for (int j = shu[i]; j <= n; j += shu[i])
      if (vis[j] == 0) ge++;
    if (ge % 2 == 0) {
      for (int j = shu[i]; j <= n; j += shu[i]) {
        if (vis[j] == 0) {
          chu.push_back(j);
          vis[j] = 1;
        }
      }
    }
    if (ge % 2 == 1) {
      if (vis[shu[i]] == 0) {
        vis[shu[i]] = 1;
        chu.push_back(shu[i]);
      }
      for (int j = 3 * shu[i]; j <= n; j += shu[i]) {
        if (vis[j] == 0) {
          chu.push_back(j);
          vis[j] = 1;
        }
      }
    }
  }
  for (int i = 2; i <= n; i += 2) {
    if (vis[i] == 0) {
      chu.push_back(i);
      ans++;
    }
  }
  if (ans % 2 == 1) chu.pop_back();
  cout << chu.size() / 2 << endl;
  for (int i = 0; i < chu.size(); i += 2) {
    printf("%d %d\n", chu[i], chu[i + 1]);
  }
  return 0;
}
