#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng(
    (unsigned)chrono::system_clock::now().time_since_epoch().count());
const long double error = 1e-7;
const long double PI = acosl(-1);
const int nmax = 2e5 + 10;
vector<pair<int, int>> ans;
void solve(int l, int r) {
  if (l == r) {
    return;
  }
  int mid = (l + r) / 2;
  solve(l, mid);
  solve(mid + 1, r);
  for (int i = l, j = mid + 1; i <= mid; i++, j++) {
    ans.emplace_back(i, j);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int n;
  cin >> n;
  int cur = 1;
  vector<vector<int>> ranges;
  for (int i = 31; i >= 0; i--) {
    if (n & (1LL << (i))) {
      solve(cur, cur + (1LL << (i)) - 1);
      ranges.emplace_back((1LL << (i)));
      iota(ranges.back().begin(), ranges.back().end(), cur);
      cur += (1LL << (i));
    }
  }
  cur = 1;
  auto v = ranges.back();
  ranges.pop_back();
  while (ranges.size() > 1) {
    if (ranges.back().size() == v.size()) {
      int sz = v.size();
      for (int i = 0; i < sz; i++) {
        ans.emplace_back(v[i], ranges.back()[i]);
        v.push_back(ranges.back()[i]);
      }
      ranges.pop_back();
    } else {
      int sz = v.size();
      for (int i = 0; i < sz; i++) {
        ans.emplace_back(v[i], ranges[0].back());
        v.push_back(ranges[0].back());
        ranges[0].pop_back();
      }
    }
  }
  cout << ans.size() << "\n";
  for (auto p : ans) {
    cout << p.first << " " << p.second << "\n";
  }
}
