#include <vector>
#include <iostream>
using namespace std;
struct edge {
	int a, b;
	edge() : a(-1), b(-1) {};
	edge(int a_, int b_) : a(a_), b(b_) {};
};
int n;
int main() {
	cin >> n;
	int x = 32;
	vector<edge> v;
	for (int i = 2; i <= x; i++) {
		for (int j = i + 1; j <= x; j++) {
			v.push_back(edge(i, j));
		}
	}
	for (int i = 0; i < x - 1; i++) {
		if ((n >> i) & 1) v.push_back(edge(1, x - i - 1));
	}
	cout << v.size() << endl;
	for (edge e : v) {
		cout << e.a << ' ' << e.b << endl;
	}
	return 0;
}