F. Прочтите Условие Задачи
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Однажды одна из команд довольно неклассического университета участвовала в сборах по программированию. На одном из контестов была предложена задача с довольно большим условием, которое принялись одновременно читать двое из трех участников команды — гроссмейстер-геометр Захар и специалист в области ASCII-графики и парсеров Майк. Через некоторое время ребята прочитали условие, обсудили его и выяснили, что задача является довольно простой, и через пятнадцать минут решение уже было готово и отправлено в тестирующую систему. Однако, по какой-то причине, команду ожидала неудача — «Неправильный ответ на тесте 4».

Майк и Захар обсудили решение, после чего их недоумение лишь возросло, так как они были уверены в правильности написанного кода. После этого Захар решил еще раз прочитать условие задачи, и оказалось, что написанный код действительно решал задачу... Только вот совсем другую, из-за того, что условие было прочитано невнимательно.

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

Дан неориентированный граф, состоящий из $$$n$$$ вершин и $$$m$$$ ребер, соединяющих некоторые пары вершин.

Назовем последовательность вершин $$$v_1, v_2, \ldots, v_k$$$ простым путем, если для любых $$$i \neq j$$$ верно, что $$$v_i \neq v_j$$$, а также для любого $$$i = 1 \ldots k - 1$$$ в графе есть ребро, соединяющее вершины $$$v_i$$$ и $$$v_{i + 1}$$$.

Длиной простого пути будем считать количество вершин в нем.

Два простых пути $$$v_1, v_2, \ldots, v_k$$$ и $$$u_1, u_2, \ldots, u_l$$$ считаются различными, если $$$k \neq l$$$, либо $$$k = l$$$ и существует такое $$$i$$$, что $$$v_i \neq u_i$$$.

Назовем три различных простых пути $$$3$$$-связанными, если выполнены следующие условия:

  1. Первые вершины путей совпадают;
  2. Последние вершины путей совпадают;
  3. Если рассмотреть множество всех вершин данных путей, за исключением первой и последней, то найдется вершина, которая встречается более, чем в одном из трех путей.

Обратите внимание, что $$$3$$$-связанные пути не обязаны иметь одинаковую длину.

Про данный граф известно, что в нем невозможно выбрать три различных простых $$$3$$$-связанных пути.

Требуется для каждого $$$l = 1 \ldots n$$$ вычислить количество различных простых путей длины $$$l$$$ в данном графе.

Входные данные

В первой строке через пробел записаны два целых числа $$$n$$$ и $$$m$$$ ($$$1 \leq n \leq 4\,000$$$, $$$0 \leq m \leq 10^5$$$) — количество вершин и ребер в графе, соответственно.

В каждой из следующих $$$m$$$ строк через пробел записаны два числа $$$u_i$$$ и $$$v_i$$$ ($$$1 \leq u_i, v_i \leq n, u_i \neq v_i$$$), означающие, что в графе вершины $$$u_i$$$ и $$$v_i$$$ соединены ребром.

Гарантируется, что каждая пара вершин соединена не более, чем одним ребром.

Выходные данные

Выведите через пробел $$$n$$$ чисел: $$$c_1, c_2, \ldots, c_n$$$, где $$$c_i$$$ — остаток от деления количества простых путей длины $$$i$$$ в данном графе на число $$$998\,244\,353$$$.

Примеры
Входные данные
3 2
1 2
2 3
Выходные данные
3 4 2 
Входные данные
3 3
1 3
2 3
1 2
Выходные данные
3 6 6 
Входные данные
4 2
1 2
3 4
Выходные данные
4 4 0 0