Граф называется двудольным, если его вершины можно раскрасить в два цвета так, что нет ребер, соединяющих вершины одинакового цвета (то есть каждое ребро идет из вершины 1-го цвета в вершину 2-го).
Дан граф. Требуется проверить, является ли он двудольным, и если да, то раскрасить его вершины.
Входные данные
В первой строке задано сначала число N
- количество вершин графа (не превышает 100). Далее идет матрица смежности - матрица размером N
xN
из 0 и 1 (0 обозначает отсутствие ребра, 1 - наличие). Граф неориентированный, без петель.
Выходные данные
В первую строку выведите одно из сообщений YES
или NO
(в зависимости от того, является ли граф двудольным или нет). В случае ответа YES
, во второй строке выведите N
чисел - цвета, в которые нужно раскрасить вершины: для первого цвета используйте значение 1, для второго цвета - значение 2. Первая вершина должна иметь цвет 1.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
3
0 1 1
1 0 1
1 1 0
|
NO |
2 |
3
0 1 1
1 0 0
1 0 0
|
YES
1 2 2
|