CF1053E Euler tour
题目描述
Euler 是一只可爱的小松鼠。秋天来临时,他会为冬天储备一些粮食。有趣的是,Euler 喜欢以一种特殊的方式收集橡果。一棵树可以被描述为 $n$ 个橡果,通过 $n-1$ 根树枝连接,使得任意一对橡果之间恰好有一条路径。我们将橡果从 $1$ 到 $n$ 编号。
松鼠会选择一个橡果(不一定是编号为 $1$ 的)作为起点,并以一种称为“欧拉游走”(见提示)的方式访问橡果,每当他最后一次访问某个橡果时,就会收集它。
今天早上,Kate 观察了 Euler。她拿出一张纸,记录下了 Euler 路径上依次经过的橡果编号。不幸的是,在回家的路上下起了雨,部分数字变得无法辨认。现在女孩很难过,因为她需要向老师展示自己的观察结果。
“也许如果我能猜出缺失的数字,就能完成作业!”她这样想着。请你帮助她,恢复出任意一个可能的树的欧拉游走,或者告诉她她一定是记错了。
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 5 \times 10^5$),表示树中橡果的数量。
第二行包含 $2n-1$ 个整数 $a_1, a_2, \ldots, a_{2n-1}$($0 \leq a_i \leq n$),表示 Kate 记录下的树的欧拉游走。$0$ 表示该位置的数字无法辨认,需要你来猜测。
输出格式
如果不存在满足条件的欧拉游走,第一行输出 "no"。
否则,第一行输出 "yes",第二行输出一个满足条件的欧拉游走。
只要输出的欧拉游走合法即可,因为老师并不知道最初的树是什么样子的。
说明/提示
一棵有 $n$ 个橡果的树的欧拉游走是一个长度为 $2n-1$ 的橡果编号序列,满足每个橡果至少出现一次,首尾橡果编号相同,且任意相邻的两个橡果编号在树中直接通过一根树枝连接。
由 ChatGPT 4.1 翻译