E. Восстановление дерева
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Монокарп нарисовал дерево (неориентированный связный ацикличный граф) и пронумеровал его вершины. Все номера вершин — различные числа от $$$1$$$ до $$$n$$$. Для каждого ребра $$$e$$$ этого дерева он записал два числа: максимальные номера вершин в каждой компоненте, на которые распалось бы дерево, если бы он удалил ребро $$$e$$$ (и только его).

Монокарп дал вам список из $$$n - 1$$$ пар чисел. По этому списку он просит вас определить, существует ли дерево, для которого мог быть записан именно такой список пар, и если оно существует, предоставить пример.

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

В первой строке содержится одно число $$$n$$$ ($$$2 \le n \le 1\,000$$$) — количество вершин в дереве.

Каждая из следующих $$$n-1$$$ строк содержит два целых числа $$$a_i$$$ и $$$b_i$$$ ($$$1 \le a_i < b_i \le n$$$) — максимумы в тех компонентах, на которые распадается дерево при удалении $$$i$$$-го ребра.

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

Если дерево, для которого мог быть получен данный список пар, не существует, выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), после чего выведите $$$n - 1$$$ строку с описанием рёбер. В каждой из этих $$$n - 1$$$ строк должны быть записаны два числа $$$x_i$$$ и $$$y_i$$$ ($$$1 \le x_i, y_i \le n$$$) — номера вершин, соединяемых очередным ребром.

Обратите внимание: несмотря на то, что рёбра пронумерованы, ваш ответ будет засчитан как правильный, если по вашему дереву будет получен список из тех же пар чисел, расположенных в другом порядке. Это значит, что вы можете выводить ребра в любом порядке.

Примеры
Входные данные
4
3 4
1 4
3 4
Выходные данные
YES
1 3
3 2
2 4
Входные данные
3
1 3
1 3
Выходные данные
NO
Входные данные
3
1 2
2 3
Выходные данные
NO
Примечание

Одно из подходящих деревьев для первого примера. Пунктирные линии показывают ребра, при удалении которых получаются соответствующие пары.