Гаджеты на дереве
시간 제한1초메모리 제한1024 MB
양방향으로 펼친 트리에서 남은 방향 간선들을 끝점을 공유하는 두 간선씩 짝지어 분할하고, 불가능하면 No를 출력한다.
문제
Вася недавно придумал новое развлечение. Пусть дан связный ориентированный граф, состоящий из вершин и рёбер, причём для каждого ребра , существует ребро . Иначе говоря, граф был получен из дерева, в котором каждое ребро было расщеплено на два противоположных ребра, ориентированных в разные стороны.
Назовем гаджетом такую пару рёбер , что конец совпадает с началом или наоборот (в частности, два противоположных друг другу ребра --- гаджет). Вася развлекается тем, что разбивает рёбра графа на непересекающиеся гаджеты. Конечно, ему легко удалось это сделать с исходным графом.
Васин друг Петя удалил из дерева ориентированных рёбер. Таким образом, в графе осталось ориентированных ребер.
Теперь Вася хочет узнать, можно ли разбить оставшиеся ребра на непересекающиеся гаджеты, и, если можно, --- найти это разбиение. Помогите ему!

Рис. 1: Разбиение на гаджеты в первом примере
입력
В первой строке даны два целых числа и (, ) --- число вершин и число оставшихся рёбер. Гарантируется, что число чётное.
В следующих строках даны по два числа () --- начала и концы оставшихся рёбер.
출력
Если разбить рёбра на гаджеты нельзя, выведите <<No>>.
В противном случае выведите <<Yes>>, а затем выведите строк по 4 числа в каждой --- пары рёбер в каждом из гаджетов. Каждое ребро описывается двумя числами: своим началом и концом.
힌트
Разбиение на гаджеты в первом примере изображено на рисунке в условии.
Обратите внимание, что в этой задаче размер входных данных может быть большим. Рекомендуем ознакомиться с разделом <<Скорость ввода и выбор ОС>> в памятке участника.