#include #include 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 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 << x << ' ' << v.size() << endl; for (edge e : v) { cout << e.a << ' ' << e.b << endl; } return 0; }