#include <bits/stdc++.h>
using namespace std;
int N;
pair<int, int> Result[100005];
bool Use[100005];
int counter, Array[100005];
void buildArray(int prime) {
  Array[0] = 0;
  for (int k = prime; k <= N; k += prime) {
    if (Use[k] == 0) {
      Array[++Array[0]] = k;
      Use[k] = 1;
    }
  }
}
void makeArrayValid() {
  if (Array[0] % 2 == 0) return;
  Use[Array[2]] = 0;
  swap(Array[Array[0]], Array[2]);
  Array[0]--;
}
void addToResult() {
  int i;
  for (i = 1; i <= Array[0]; i += 2) {
    Result[++counter].first = Array[i];
    Result[counter].second = Array[i + 1];
  }
}
void Eratostenes() {
  int i, j;
  int last = 3;
  for (i = 3; i <= N / 2; i += 2) {
    if (Use[i] == 1) continue;
    buildArray(i);
    makeArrayValid();
    addToResult();
  }
  buildArray(2);
  makeArrayValid();
  addToResult();
}
int main() {
  cin >> N;
  Eratostenes();
  cout << counter << "\n";
  for (int i = 1; i <= counter; i++)
    cout << Result[i].first << " " << Result[i].second << "\n";
  return 0;
}
