#cf17finali. [cf17_final_i]Full Tournament

[cf17_final_i]Full Tournament

问题描述

2N2^N 名选手参加了一个锦标赛。每个选手都有一个唯一的ID编号,从 112N2^N。当两名选手进行比赛时,编号较小的选手总是获胜。

这个锦标赛有些特殊,失败者不会被淘汰,以便对所有选手进行全面排名。

我们将涉及 2n2^n 名选手的这种锦标赛称为 nn 层完全锦标赛。在第 nn 层完全锦标赛中,选手的排名如下:

  • 在第 00 层完全锦标赛中,只有一名选手,排名第一。
  • 在第 n(1leqn)n\\ (1 \\leq n) 层完全锦标赛中,最初 2n2^n 名选手按顺序排成一行。然后:
  • 首先,从最左边的两名选手开始,将选手逐个分成 2n12^{n-1} 对选手。
  • 每组选手进行比赛。获胜者进入“获胜组”,失败者进入“失利组”。
  • “获胜组”的选手按照前一行的相对顺序排列在一行上。然后,进行第 n1n-1 层完全锦标赛,对这些选手进行全面排名。
  • “失利组”的选手也按照相同的方式进行排名,然后这些选手的每个排名增加 2n12^{n-1}

例如,当八名选手按照顺序 3,4,8,6,2,1,7,53,4,8,6,2,1,7,5 排列时,下图显示了第 33 层完全锦标赛的进行情况。按最终排名排序的选手列表将是 1,3,5,6,2,4,7,81,3,5,6,2,4,7,8

高桥手上有一张纸,上面列着按锦标赛最终排名排序的选手列表,但其中的一部分模糊不清,无法辨认。将纸上的信息给出作为长度为 NN 的序列 AA。当 AiA_i 大于或等于 11 时,表示第 ii 名选手的ID为 AiA_i。如果 AiA_i 等于 00,表示第 ii 名选手的ID丢失。

确定在第一阶段锦标赛中是否存在与纸上信息一致的有效顺序。如果存在,提供一个这样的顺序。

约束条件

  • 1N181 \leq N \leq 18
  • 0Ai2N0 \leq A_i \leq 2^N
  • AiA_i 中除了 00 之外的整数不能重复出现。

输入

从标准输入中以以下格式给出输入:

NN A1A_1 A2A_2 ...... A2NA_{2^N}

输出

如果第一阶段锦标赛存在一个有效的顺序,先打印 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