#cf17finali. [cf17_final_i]Full Tournament
[cf17_final_i]Full Tournament
问题描述
有 名选手参加了一个锦标赛。每个选手都有一个唯一的ID编号,从 到 。当两名选手进行比赛时,编号较小的选手总是获胜。
这个锦标赛有些特殊,失败者不会被淘汰,以便对所有选手进行全面排名。
我们将涉及 名选手的这种锦标赛称为 第 层完全锦标赛。在第 层完全锦标赛中,选手的排名如下:
- 在第 层完全锦标赛中,只有一名选手,排名第一。
- 在第 层完全锦标赛中,最初 名选手按顺序排成一行。然后:
- 首先,从最左边的两名选手开始,将选手逐个分成 对选手。
- 每组选手进行比赛。获胜者进入“获胜组”,失败者进入“失利组”。
- “获胜组”的选手按照前一行的相对顺序排列在一行上。然后,进行第 层完全锦标赛,对这些选手进行全面排名。
- “失利组”的选手也按照相同的方式进行排名,然后这些选手的每个排名增加 。
例如,当八名选手按照顺序 排列时,下图显示了第 层完全锦标赛的进行情况。按最终排名排序的选手列表将是 。
高桥手上有一张纸,上面列着按锦标赛最终排名排序的选手列表,但其中的一部分模糊不清,无法辨认。将纸上的信息给出作为长度为 的序列 。当 大于或等于 时,表示第 名选手的ID为 。如果 等于 ,表示第 名选手的ID丢失。
确定在第一阶段锦标赛中是否存在与纸上信息一致的有效顺序。如果存在,提供一个这样的顺序。
约束条件
- 中除了 之外的整数不能重复出现。
输入
从标准输入中以以下格式给出输入:
输出
如果第一阶段锦标赛存在一个有效的顺序,先打印 YES
,然后在接下来的行中打印按最终排名排序的选手的ID,每个ID之间用空格分隔。如果不存在这样的顺序,而打印 NO
。
示例输入 1
3
0 3 0 6 0 0 0 8
示例输出 1
YES
3 4 8 6 2 1 7 5
这与题目中的顺序相同。
示例输入 2
1
2 1
示例输出 2
NO