EduBrick

G. Конденсация графа

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

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

Формат ввода

В первой строке - числа NN и MM (1≤N≤2⋅1051 \le N \le 2 \cdot 10^5, 0≤M≤2⋅1050 \le M \le 2 \cdot 10^5).

В следующих MM строках - рёбра графа. Возможны петли и кратные рёбра.

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

В первой строке выведите число компонент KK.

Во второй строке - NN чисел: номер компоненты каждой вершины. Компоненты нумеруются в порядке лексикографически наименьшей топологической сортировки конденсации; компоненты сравниваются по наименьшей входящей в них вершине.

Примеры

ввод
3 3
1 2
2 3
3 1
вывод
1
1 1 1
ввод
4 2
1 2
3 4
вывод
4
1 2 3 4
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.