D. Топологическая сортировка
Дан ориентированный граф. Выведите его топологическую сортировку или , если её не существует.
Сортировок обычно много; чтобы ответ был единственным, выведите лексикографически наименьшую последовательность номеров вершин.
Тут удобнее не обход в глубину, а алгоритм Кана: держим полустепени захода, кладём в кучу все вершины с нулевой, достаём наименьшую, снимаем её рёбра. Куча нужна именно ради лексикографического минимума: без неё сгодилась бы обычная очередь.
Если в конце выведено меньше вершин, значит остался цикл — ответ .
Заметьте: «лексикографически наименьшая сортировка» и «отсортировать вершины по времени выхода из обхода в глубину» — разные вещи. Обход в глубину даёт какую-то сортировку, но не обязательно наименьшую.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами. Возможны кратные рёбра и петли.
Формат вывода
Либо чисел в одной строке, либо .
Примеры
6 6 1 2 3 2 4 2 2 5 6 5 4 6
1 3 4 2 6 5
3 3 1 2 2 3 3 1
-1