EduBrick

D. Топологическая сортировка

3000 мс · 256 МБ · всё или ничего

Дан ориентированный граф. Выведите его топологическую сортировку или −1-1, если её не существует.

Сортировок обычно много; чтобы ответ был единственным, выведите лексикографически наименьшую последовательность номеров вершин.

Тут удобнее не обход в глубину, а алгоритм Кана: держим полустепени захода, кладём в кучу все вершины с нулевой, достаём наименьшую, снимаем её рёбра. Куча нужна именно ради лексикографического минимума: без неё сгодилась бы обычная очередь.

Если в конце выведено меньше nn вершин, значит остался цикл — ответ −1-1.

Заметьте: «лексикографически наименьшая сортировка» и «отсортировать вершины по времени выхода из обхода в глубину» — разные вещи. Обход в глубину даёт какую-то сортировку, но не обязательно наименьшую.

Формат ввода

Первая строка содержит числа nn (1≤n≤1051 \le n \le 10^5) и mm (0≤m≤1050 \le m \le 10^5).

Далее идут mm строк с рёбрами. Возможны кратные рёбра и петли.

Формат вывода

Либо nn чисел в одной строке, либо −1-1.

Примеры

ввод
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
Войдите, чтобы отправлять решения.