Zadania domowe z sortowania topologicznego i silinie spójnych składowych === Rozwiązanie każdego zadania powinno być programem komputerowym. Ten progam powinien się budować poprzez system budowania `CMake` lub `make` na bossie. Jeśli w katalogu głównym Waszego repozytorium znajduje się plik `CMakeLists.txt`, użyję systemu `CMake`, jeśli nie - to systemu `make`. Budowanie z `CMake` --- Będę to robił mniej więcej tak: ``` $ mkdir -p build $ cd build $ cmake .. $ make ``` Budowanie z `make` --- Tu będzie nawet prościej: ``` $ make ``` Zadania --- Każde zadanie polega na napisaniu programu komputerowego, który wczytuje z wejścia opis grafu, oblicza *coś* i wypisuje opis tego *czegoś* na wyjście. Format wejścia jest następujący ``` n m u_1 v_1 u_2 v_2 ... u_m v_m ``` gdzie `n` i `m` oznaczają odpowiednio liczbę wierzchołków oraz krawędzi. `u_i` to początki krawędzi, a `v_i` - ich końce. Wierzchołki są numerowane różnymi liczbami całkowitymi od `1` do `n`. Zadanie 1 --- ``` Kod zadania: topo/sort ``` Wypisz na wyjście jakikolwiek z porządków topologicznych grafu. Jeśli nie ma, to wypisz `NIE`. Ograniczenia: `n ≤ 200000, m ≤ 300000`. Zadanie 2 --- ``` Kod zadania: topo/count ``` Wypisz na wyjście liczbę porządków topologicznych grafu. Ograniczenia: `n ≤ 20`. Zadanie 3 --- ``` Kod zadania: scc/partition ``` Wypisz `n` liczb całkowitych z zakresu `1...n`. `i`-ta i `j`-ta powinny być równe wtedy i tylko wtedy, gdy `i` oraz `j` są w jednej silnie spójnej składowej. Ograniczenia: `n ≤ 200000, m ≤ 300000`. Zadanie 3 --- ``` Kod zadania: scc/make1 ``` Dodaj do grafu jak najmniejszą liczbę krawędzi, tak żeby graf był silnie spójny. Na wyjście wypisz liczbę dodanych krawędzi oraz, w kolejnych wierszach, końce kolejnych krawędzi. Ograniczenia: `n ≤ 200000, m ≤ 300000`.