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
// dag-skierowany-graf-acykliczny.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>

constexpr int MAXN = 46;
//constexpr int MAXN = 5;
constexpr int MAXV = 107;
constexpr int ANSW = 2 * MAXN + 5;

int t[MAXN + 1];

int edges[MAXV][2];

inline int l(int x)
{
	if (x == 0) return -1;
	return x;
}

int main()
{
	t[1] = t[2] = 1;
	for (size_t i = 3; i <= MAXN; i++)
	{
		t[i] = t[i - 1] + t[i - 2];
		//std::cout << t[i] << '\n';
	}
	for (size_t i = 1; i <= 2*MAXN; i+=2)
	{
		edges[i][0] = i + 1;
		edges[i + 1][0] = i + 2;
		edges[i + 1][1] = i + 4;
	}

	int n;
	std::cin >> n;
	for (size_t i = MAXN; i > 0; i--)
	{
		if (n >= t[i])
		{
			n -= t[i];
			edges[2*i-1][1] = ANSW;
		}
	}
	std::cout << ANSW << '\n';
	for (size_t i = 1; i <= ANSW; i++)
	{
		std::cout << l(edges[i][0]) << ' ' << l(edges[i][1]) << '\n';
	}
}

// Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
// Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie

// Porady dotyczące rozpoczynania pracy:
//   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
//   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
//   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
//   4. Użyj okna Lista błędów, aby zobaczyć błędy
//   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
//   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln