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
#include <cstdio>
#include <vector>

using namespace std;

unsigned int k;
vector<unsigned int> fib_num;
vector<int> idx;

void gen_fibo(int a)
{
        fib_num.resize( a+1 );

        fib_num[0] = 0;
        fib_num[1] = 1;

        for(int i = 2; i <= a; ++i) {
                fib_num[i] = fib_num[i-1] + fib_num[i-2];
        }
}

void populate_fibo_idx()
{
        unsigned int n;
        int i;

        n = k;
        while (n != 0) {
                i = 1;
                while(fib_num[i] <= n) {
                        i++;
                }
                idx.push_back(i-1);
                n -= fib_num[i-1];
        }
}

int main()
{       
        scanf("%u", &k);

        gen_fibo(45);
        populate_fibo_idx();

        {
                int mov = idx.size()-1;
                printf("%d\n", idx[0]+mov);
                for(int i = 1; i <= mov; ++i) {
                        printf("%d %d\n", i+1, idx[0] - idx[i] + 1 + mov);
                }
                for(int i = 1+mov; i < idx[0]+mov-1; ++i) {
                        printf("%d %d\n", i+1, i+2);
                }
                printf("%d -1\n", idx[0]+mov);
                printf("-1 -1\n");
        }
        return 0;
}