#include <bits/stdc++.h>
const int MAXN = 1e5 + 7;
bool vis[MAXN];
std::vector<int> ans, tmp;
inline void solve(int n) {
  for (register int i = 3; i <= n >> 1; i++) {
    if (!vis[i] && (i & 1)) {
      ans.push_back(i), vis[i] = true, vis[i << 1] = true;
      register int c = 1;
      for (register int j = 3; j * i <= n; j++)
        if (!vis[j * i]) vis[j * i] = true, ans.push_back(j * i), c++;
      if (~c & 1)
        tmp.push_back(i << 1);
      else
        ans.push_back(i << 1);
    }
  }
  for (register int i = 2; i <= n; i += 2)
    if (!vis[i]) tmp.push_back(i);
  std::cout << (ans.size() / 2) + (tmp.size() / 2) << "\n";
  for (register int i = 0; i < ans.size(); i += 2)
    std::cout << ans[i] << " " << ans[i + 1] << "\n";
  for (register int i = 0; i + 1 < tmp.size(); i += 2)
    std::cout << tmp[i] << " " << tmp[i + 1] << "\n";
}
int main() {
  std::ios::sync_with_stdio(false), std::cin.tie(0);
  register int n;
  std::cin >> n;
  solve(n);
  return 0;
}
