C. Дерево обхода в глубину
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Задан связный неориентированный граф $$$G$$$, состоящий из $$$n$$$ вершин и $$$m$$$ ребер. Вершины пронумерованы от $$$1$$$ до $$$n$$$. Также задано дерево $$$T$$$, состоящее из тех же $$$n$$$ вершин. Все ребра дерева $$$T$$$ являются ребрами графа $$$G$$$.

Назовем списком смежности вершины $$$v$$$ список таких вершин $$$u$$$, что существует ребро $$$(v, u)$$$. В каждом списке смежности вершины расположены в каком-то порядке.

Напомним классический алгоритм обхода в глубину графа $$$G$$$. Определим функцию dfs, которая принимает один целочисленный аргумент $$$v$$$ — номер рассматриваемой вершины. На входе в функцию вершина $$$v$$$ помечается посещенной. Затем перебираются все вершины $$$u$$$ списка смежности $$$v$$$. Если $$$u$$$ ранее была посещена, то алгоритм переходит к рассмотрению следующей вершины в списке смежности. Если же $$$u$$$ не была посещена, то функция dfs запускается из вершины $$$u$$$ рекурсивно. Когда рекурсивный вызов завершается, алгоритм снова переходит к рассмотрению следующей вершины в списке смежности. Когда следующей вершины в списке смежности нет, функция завершается.

Дерево обхода в глубину строится следующим образом. Когда функция dfs находится в вершине $$$v$$$ и запускается рекурсивно из вершины $$$u$$$, ребро $$$(v, u)$$$ добавляется в дерево. Можно показать, что граф, построенный таким алгоритмом, действительно является деревом.

Для каждой вершины $$$i$$$ от $$$1$$$ до $$$n$$$ определите, можно ли так переупорядочить списки смежности всех вершин (возможно, не изменяя порядок), чтобы дерево обхода в глубину графа $$$G$$$, запущенного из вершины $$$i$$$, состояло из тех же ребер, что и дерево $$$T$$$. Обратите внимание: вы можете менять порядок вершин внутри каждого списка смежности, но не можете перемещать их между разными списками смежности.

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

В первой строке записаны два целых числа $$$n$$$ и $$$m$$$ ($$$2 \le n \le 2 \cdot 10^5$$$; $$$n - 1 \le m \le \min(\frac{n(n-1)}{2}, 3 \cdot 10^5)$$$).

В каждой из следующих $$$m$$$ строк записаны два целых числа $$$v$$$ и $$$u$$$ ($$$1 \le v, u \le n$$$) — описание ребер графа $$$G$$$.

В каждой из следующих $$$n - 1$$$ строк записаны два целых числа $$$v$$$ и $$$u$$$ ($$$1 \le v, u \le n$$$) — описание ребер дерева $$$T$$$.

Дополнительные ограничения на входные данные:

  • граф $$$G$$$ связный, а также не содержит петель и кратных ребер;
  • ребра графа $$$T$$$ образуют дерево;
  • все ребра дерева $$$T$$$ являются ребрами графа $$$G$$$.
Выходные данные

Выведите бинарную строку длины $$$n$$$. $$$i$$$-й символ должен быть равен 1, если можно переупорядочить списки смежности всех вершин (возможно, не изменяя порядок), чтобы дерево обхода в глубину графа $$$G$$$, запущенного из вершины $$$i$$$, состояло из тех же ребер, что и дерево $$$T$$$. В противном случае $$$i$$$-й символ должен быть равен 0.

Примеры
Входные данные
4 4
1 2
2 3
2 4
1 3
1 2
2 3
4 2
Выходные данные
1010
Входные данные
6 7
1 2
1 3
1 5
3 5
3 4
3 6
5 6
1 2
1 3
3 5
3 4
5 6
Выходные данные
110001
Входные данные
4 6
1 2
3 1
3 2
2 4
3 4
1 4
2 1
4 1
1 3
Выходные данные
0000