Олег живет в стране Банкополии. В стране n городов, некоторые пары городов соединены двунаправленными дорогами. Города пронумерованы от 1 до n. Всего в Банкополии m дорог, дорога номер i соединяет города ui и vi. Гарантируется. что из любого города можно добраться в любой другой по дорогам.
Олег хочет отметить целым числом каждый город. Предположим. отметка города i равна xi. Тогда для любой пары городов (u, v) условие |xu - xv| ≤ 1 должно выполняться тогда и только тогда, когда есть дорога, соединяющая u и v.
Олег задумался над вопросом, возможно ли так отметить города. Расставьте корректно отметки городам, или найдите, что это невозможно.
Первая строка содержит два целых числа n и m (2 ≤ n ≤ 3·105, 1 ≤ m ≤ 3·105) — число городов и число дорог.
Далее следуют m строк. Строка i содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — города. соединяемые i-й дорогой. Гарантируется, что между каждой парой городов есть не более чем одна дорога, и что от каждого города можно добраться до любого другого по дорогам.
Если невозможно отметить города. удовлетворив условию, выведите в единственной строке «NO» (без кавычек).
Иначе выведите «YES» (без кавычек) в первой строке. Во второй строке выведите n целых чисел x1, x2, ..., xn. Должно выполняться 1 ≤ xi ≤ 109 для всех i, кроме того, для любой пары (u, v) условие |xu - xv| ≤ 1 должно выполняться тогда и только тогда, когда есть дорога, соединяющая u и v.
4 4
1 2
1 3
1 4
3 4
YES
2 3 1 1
5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
5 4
YES
1 1 1 1 1
4 3
1 2
1 3
1 4
NO
В первом примере x1 = 2, x2 = 3, x3 = x4 = 1 — корректная расстановка отметок. Действительно, (3, 4), (1, 2), (1, 3), (1, 4) — пары городов, разница отметок на которых не превосходит 1, и именно эти пары городов соединяются дорогами Банкополии.
Во втором примере разница отметок между любой парой городов не превосходит 1, все пары городов соединены дорогами.
В последнем примере невозможно расставить отметки так, чтобы удовлетворить условию.
Название |
---|