atcoder#CF17FINALI. Full Tournament

Full Tournament

题目描述

2N 2^N 人の選手でトーナメント戦を行いました。 各選手には 1 1 2N 2^N の番号がついており、2 2 人が対戦したときは番号が小さい方の選手が必ず勝ちます。

行ったトーナメント戦は少し変わっていて、敗者どうしも対戦をすることで全員の順位を決めるものでした。

ここで、2n 2^n 人で行うこのようなトーナメント戦を「レベル n n のフルトーナメント」と呼ぶことにします。 レベル n n のフルトーナメントの順位は以下のように決定されます。

  • レベル 0 0 のフルトーナメントでは参加者が 1 1 人であり、この人が 1 1 位となる。
  • レベル n (1  n) n\ (1\ \leq\ n) のフルトーナメントは、2n 2^n 人の選手が横 1 1 列に並んだ状態から始まり、以下のように順位を決定する。
  • まず、端から 2 2 人ずつに区切り、2n1 2^{n-1} 組の 2 2 人組を作る。
  • それぞれの 2 2 人組で対戦を行い、勝った方が勝ちグループに、負けた方が負けグループに入る。
  • 勝ちグループに入った選手を元の列での順序を保ったまま並べ、レベル n1 n-1 のフルトーナメントを行い、各選手の順位を決定する。
  • 負けグループについても同様に順位をつけ、その後に負けグループの各選手の順位に 2n1 2^{n-1} を足す。

例えば、8 8 人の選手を 3,4,8,6,2,1,7,5 3,4,8,6,2,1,7,5 の順に並べてレベル 3 3 のフルトーナメントを行うと下図のようにトーナメントが行われ、結果の順位順に選手を並べると 1,3,5,6,2,4,7,8 1,3,5,6,2,4,7,8 となります。

e93269f0dfb68bcdff175a3b634ab0d8.png

高橋君は、選手の番号をトーナメントの結果の順位順に書いた紙を持っていましたが、いくつかの場所が汚れて読めなくなってしまいました。 この紙の情報は長さ N N の数列 A A として与えられ、Ai A_i 1 1 以上のときは i i 位の選手の番号が Ai A_i であったことを表し、0 0 のときは i i 位の選手の番号が分からなくなってしまったことを表します。

最初の選手の並び順として考えられるものが存在するかどうかを判定し、存在するならば例を 1 1 つ答えてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N A1 A_1 A2 A_2 ... ... A2N A_{2^N}

输出格式

最初の選手の並び順として考えられるものが存在する場合は YES と出力し、2 2 行目に選手の番号を順番に空白区切りで出力せよ。 存在しない場合は代わりに NO と出力せよ。

题目大意

2N2^N 位选手在参加一场赛事,编号为 12N1\sim 2^N。两位选手在比赛时,编号小的一定会赢。

一场规模为 nn 的赛事含有 2n2^n 位选手,赛程定义如下:

  • 规模为 00 的赛事中,仅有的一名选手获得第一。

  • 规模为 n1n\ge 1 的赛事中,选手们排成一排,且对所有 ii,第 2i12i-1 位选手与第 2i2i 位选手进行一场比赛。 接下来按照第一轮比赛的胜负分为胜者组和败者组,每组 2n12^{n-1} 个人。组内选手的顺序依最开始的顺序排列。

之后在胜者组和败者组分别进行规模为 n1n-1 的赛事,最后 将败者组所有人的排名增加 2n12^{n-1} 作为最终排名。

给出其中一些人的排名,请构造一个合法的最开始时选手们的顺序,或输出无解。

  • 1N181\le N\le 18
3
0 3 0 6 0 0 0 8
YES
3 4 8 6 2 1 7 5
1
2 1
NO

提示

制約

  • 1  N  18 1\ \leq\ N\ \leq\ 18
  • 0  Ai  2N 0\ \leq\ A_i\ \leq\ 2^N
  • Ai A_i には 0 0 以外の整数は重複して含まれていない。

Sample Explanation 1

問題文中の例と同じ並び順です。