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 翻译