#include <bits/stdc++.h>
using namespace std;
const long long int mod = 998244353;
const int maxn = 1e5 + 10;
void pvec(vector<long long int> v) {
  for (auto x : v) {
    cout << x << " ";
  }
  cout << endl;
}
long long int gcd(long long int x, long long int y) {
  if (y == 0) {
    return x;
  } else {
    return gcd(y, x % y);
  }
}
long long int binpow(long long int a, long long int b) {
  if (b == 0) {
    return 1;
  }
  long long int res = 1;
  long long int tmp = binpow(a, b / 2);
  res = (tmp * tmp) % mod;
  if (b % 2 == 1) {
    res = (res * a) % mod;
  }
  return res;
}
void solve() {
  int n;
  cin >> n;
  int p = 1;
  while (p <= n) {
    p *= 2;
  }
  p /= 2;
  vector<pair<int, int> > v1, v2;
  int q = 1;
  while (q < p) {
    for (int i = 0; i < (p / (2 * q)); i++) {
      int bs = i * q * 2;
      for (int j = 1; j <= q; j++) {
        v1.push_back({bs + j, bs + j + q});
      }
    }
    q *= 2;
  }
  q = 1;
  while (q < p) {
    for (int i = 0; i < (p / (2 * q)); i++) {
      int bs = i * q * 2 + n - p;
      for (int j = 1; j <= q; j++) {
        v2.push_back({bs + j, bs + j + q});
      }
    }
    q *= 2;
  }
  cout << v1.size() + v2.size() << "\n";
  for (pair<int, int> w : v1) {
    cout << w.first << " " << w.second << "\n";
  }
  for (pair<int, int> w : v2) {
    cout << w.first << " " << w.second << "\n";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  int cnt = 1;
  while (t--) {
    solve();
  }
  return 0;
}
