EduBrick

H. Есть ли цикл

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

Неориентированный граф задан списком рёбер. Проверьте, есть ли в нём цикл.

Обходом это проверяется так: если из вершины vv мы видим уже посещённого соседа, который не является тем, откуда мы пришли, — цикл найден.

Два ребра между одними и теми же вершинами уже образуют цикл, а петля — цикл длины один.

Про «откуда пришли» стоит сказать точно. Если запоминать номер вершины-родителя и пропускать все рёбра в него, ответ всё равно получится верным: второе ребро между теми же вершинами увидит сам родитель, когда вернётся к перебору своих соседей. Проверено перебором на тридцати тысячах случайных мультиграфов — расхождений нет. Но запоминать номер ребра надёжнее: тогда рассуждение не зависит от того, с какой стороны обход дошёл до ребра, и переносится на задачи, где такой оговорки уже не будет.

Формат ввода

Первая строка содержит числа nn (1≤n≤1051 \le n \le 10^5) и mm (0≤m≤2⋅1050 \le m \le 2 \cdot 10^5).

Далее идут mm строк с рёбрами. Возможны петли и кратные рёбра.

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

Слово «YES», если цикл есть, и «NO» иначе.

Примеры

ввод
3 3
1 2
2 3
3 1
вывод
YES
ввод
2 2
1 2
1 2
вывод
YES
Войдите, чтобы отправлять решения.