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
#include <stdio.h>
long long int fib[51];
int M,rozk[100];


void licz_fib(void)
{
	int i;

	fib[0]=0; fib[1]=1;
	for(i=2;i<50;++i)
		fib[i]=fib[i-1]+fib[i-2];

	return;
}

void rozklad(long long int r)
{
	long long int w;
	int i,j;
	w=r;

	i=0;
	while(w>0)
	{
		j=1; 
		while(fib[j]<=w) j++;
		rozk[i]=j-1; i++;
		w-=fib[j-1];
	}

	M=i;

    printf("%d\n",rozk[0]+M-1);

	for(i=M-1;i>0;i--)
		printf("%d %d\n",M-i+1,rozk[0]+M-rozk[i]);
    for(i=0;i<rozk[0]-2;++i)
		printf("%d %d\n",M+i+1,M+i+2);
	printf("%d %d\n",rozk[0]+M-1,-1);
	printf("-1 -1\n");
	return;
}


int main()
{
	long long int x,y;
	
	licz_fib();
	scanf("%lld",&x);
	rozklad(x);
	
	return 0;
}