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
#include <iostream>
#include <cmath>

using namespace std;

#define n 100
int graf[n][2];
long long iledrug[n];
void printgr();
void printgr2();
int main(){

	long long k;
	cin >>k;

	
	for(int i=0;i<n-1;i++){
		graf[i][0]=-1;
		graf[i][1]=i+1;
		iledrug[i] =1;
	}
	graf[n-1][0]=-1;
	graf[n-1][1]=-1;
	iledrug[n-1]=1;
	if (k ==1) {
		printgr2();
		return 0;
	}
	long long kwynik = 1;
//	graf[n-3][0]=n-1;
//	iledrug[n-3]=2;
	int ostatniei=2,ostatniej;

		kwynik = 1;
		for(int i=n-1 -ostatniei;i>=0;i-=2) {
			iledrug[i] = 2*iledrug[i+2] ;
			graf[i][0] = i+2;
			kwynik=kwynik*2;
			ostatniei=i;
			if(kwynik*2>k) break;

		}
		ostatniej=ostatniei;
		k = k-kwynik;
	while (k>0) {
		kwynik = 1;
		
		ostatniei +=2;
		kwynik= iledrug[ostatniei];
		if(k/iledrug[ostatniei] !=0) {
			ostatniej-=1;
			graf[ostatniej][0] = ostatniei;
			
//			ostatniej=i;
			k = k -kwynik;
		}
			
		
	
	}


	printgr2();

	return 0;

}
void printgr() {
	for(int i=0;i<n;i++)
		cout << i << " ->" << graf[i][0] <<" ->" << graf[i][1]<< " ile drug=" << iledrug[i] <<endl;
}
void printgr2() {
	cout << n << endl;
	for(int i=0;i<n;i++) {
		if (graf[i][0]!=-1)
			graf[i][0]+=1;

		if (graf[i][1]!=-1)
			graf[i][1]+=1;
		
		cout <<  graf[i][0]<<" " << graf[i][1] <<endl;
	}
}