1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include<bits/stdc++.h>
using namespace std;
 
#define REP(i, n) for(int i = 0; i < n; i++)
#define FOR(i, a, b) for(int i = a; i <= b; i++)
#define ST first
#define ND second
 
ostream& operator<<(ostream &out, string str) {
	for(char c : str) out << c;
	return out;
}
 
template<class L, class R> ostream& operator<<(ostream &out, pair<L, R> p) {
	return out << "(" << p.ST << ", " << p.ND << ")";
}

template<class T> auto operator<<(ostream &out, T &&x) -> decltype(x.begin(), out) {
	out << '{';
	for(auto &e : x)
        	out << e << (&e == &*--x.end() ? "" : ", ");
	return out << '}';
}

template<class... Args> void dump(Args&&... args) {
	((cerr << args << ";  "), ...);
}
 
#ifdef DEBUG
#  define debug(x...) cerr << "[" #x "]: ", dump(x), cerr << "\n"
#else
#  define debug(...) false
#endif
 
template<class T> int size(T && a) { return (int) a.size(); }
 
using LL = long long;
using PII = pair<int, int>;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	LL k;
	cin >> k;

	vector<vector<int>> adj;
	auto add_vertex = [&]() {
		int r = size(adj);
		adj.emplace_back();
		return r;
	};

	int m = 0;
	auto add_edge = [&](int a, int b) {
		m++;
		adj[a].emplace_back(b);
	};

	int start = add_vertex();
	int ogonek = add_vertex();
	int tunel = add_vertex();
	add_edge(start, ogonek);
	add_edge(start, tunel);

	bool started = false;
	for(int i = 30; i >= 0; i--) {
		if(started) {
			int nowy = add_vertex();
			int bok = add_vertex();
			int dalej = add_vertex();
			add_edge(tunel, bok);
			add_edge(tunel, dalej);
			add_edge(bok, dalej);
			add_edge(ogonek, nowy);
			if(k & (1 << i)) add_edge(ogonek, dalej);
			tunel = dalej;
			ogonek = nowy;
		}
		if(k & (1 << i)) started = true;
	}

	cout << size(adj) << "\n";
	for(auto &g : adj) {
		g.resize(2, -2);
		for(int v : g)
			cout << v + 1 << " ";
		cout << "\n";
	}
}