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
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;

int n, x;
int fib[50];
int maxx, counter;
queue<int> Q;

int main() {
	ios_base::sync_with_stdio(0);
	cin >> n;
	
	fib[1] = 1;
	fib[2] = 1;
	for(int i = 3; i <= 45; i++) {
		fib[i] = fib[i-1] + fib[i-2];
	}
	
	
	int nn = n, cur = 45;
	while(nn > 0 && cur > 1) {
		if(nn >= fib[cur]) {
			nn -= fib[cur];
			Q.push(cur);
			counter++;
			if (maxx == 0) {
				maxx = cur;
			}
		}
		cur--;
	}
	
	cout << maxx + counter << endl;
	cur = 1;
	
	while(!Q.empty()) {
		x = Q.front();
		Q.pop();
		
		if(Q.empty()) {
			cout << counter+(maxx-x+1) << " -1" << endl;
		} else {
			cout << cur+1 << " " << counter+(maxx-x+1) << endl;
		}
		cur++;
	}
	
	for(int i = 1; i <= maxx; i++) {
		if(i == maxx) {
			cout << "-1 -1" << endl;
		} else if(i == maxx-1) {
			cout << cur+1 << " -1" << endl;
		} else {
			cout << cur+1 << " " << cur+2 << endl;
		}
		cur++;
	}
	
	
	
	return 0;
}