Эйлер — маленький милый бельчонок. Когда приходит осень, он запасается желудями на зиму. Интересный факт, что Эйлер обычно собирает желуди очень специфичным способом. Дерево, с которого он собирает желуди, можно представить как \(n\) желудей, соединенных \(n - 1\) веткой таким образом, что есть ровно один путь между каждой парой желудей. Пронумеруем желуди от \(1\) до \(n\).
Бельчонок выбирает один из желудей (не обязательно с номером \(1\)) как старт, затем обходит все желуди способом, который называется «Эйлеров обход» (см. примечание), собирая каждый из желудей, когда он посещает его в последний раз.
Сегодня утром Кейт наблюдала за Эйлером. Она записала на листочке все желуди, которые посетил Эйлер на своем пути. К сожалению, на пути домой она попала под дождь и часть чисел теперь невозможно прочитать. Девочка очень расстроилась, так как свои наблюдения она должна была показать учителю.
«Может быть, если я угадаю пропавшие числа, я все еще смогу показать это учителю!» — подумала Кейт. Помогите ей, восстановите любой Эйлеров обход некоторого дерева или скажите, что у нее где-то ошибка.
Выходные данные
Если нет никакого Эйлерова обхода, удовлетворяющего описанию, выведите "no" в единственной строке.
Иначе выведите на первой строке "yes", а на второй строке выведите искомый Эйлеров обход.
Любой подходящий Эйлеров обход будет считаться правильным, так как учитель не знает, как выглядело исходное дерево.
Примечание
Эйлеров обход дерева с \(n\) желудями — последовательность из \(2n - 1\) индекса желудей такая, что каждый желудь встречается хотя бы один раз, первый и последний желуди совпадают, и каждые два соседних в обходе желудя соединены веткой.