#include <bits/stdc++.h>
using namespace std;
long long mod = 100000000;
const long long N = 100000 + 7;
vector<long long> v[N];
long long us[N];
long long used[N];
void solve() {
  long long n;
  cin >> n;
  set<long long> s;
  vector<pair<long long, long long>> ans;
  for (long long i = 3; i <= n / 2; i += 2) {
    if (!us[i]) {
      for (long long j = i; j <= n; j += i) {
        if (used[j]) continue;
        us[j] = 1;
        v[i].push_back(j);
        used[j] = 1;
      }
    }
  }
  s.insert(2);
  used[2] = 1;
  for (long long i = 1; i <= n; i++) {
    if (v[i].size() > 0) {
      if (v[i].size() % 2) {
        s.insert(2 * i);
        ans.push_back({v[i][0], v[i][2]});
        for (long long j = 3; j < v[i].size(); j += 2)
          ans.push_back({v[i][j], v[i][j + 1]});
      } else {
        for (long long j = 0; j < v[i].size(); j += 2)
          ans.push_back({v[i][j], v[i][j + 1]});
      }
    }
  }
  for (long long i = 4; i <= n; i += 2) {
    if (!used[i]) s.insert(i);
  }
  while (s.size() > 1) {
    long long x1 = *s.begin();
    s.erase(s.begin());
    long long x2 = *s.begin();
    s.erase(s.begin());
    ans.push_back({x1, x2});
  }
  cout << ans.size() << "\n";
  for (auto x : ans) cout << x.first << " " << x.second << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) {
    solve();
    cout << "\n";
  }
}
