atcoder#CF17FINALI. Full Tournament
Full Tournament
配点 : 点
問題文
人の選手でトーナメント戦を行いました。 各選手には 〜 の番号がついており、 人が対戦したときは番号が小さい方の選手が必ず勝ちます。
行ったトーナメント戦は少し変わっていて、敗者どうしも対戦をすることで全員の順位を決めるものでした。
ここで、 人で行うこのようなトーナメント戦を「レベル のフルトーナメント」と呼ぶことにします。 レベル のフルトーナメントの順位は以下のように決定されます。
- レベル のフルトーナメントでは参加者が 人であり、この人が 位となる。
- レベル のフルトーナメントは、 人の選手が横 列に並んだ状態から始まり、以下のように順位を決定する。
- まず、端から 人ずつに区切り、 組の 人組を作る。
- それぞれの 人組で対戦を行い、勝った方が勝ちグループに、負けた方が負けグループに入る。
- 勝ちグループに入った選手を元の列での順序を保ったまま並べ、レベル のフルトーナメントを行い、各選手の順位を決定する。
- 負けグループについても同様に順位をつけ、その後に負けグループの各選手の順位に を足す。
例えば、 人の選手を の順に並べてレベル のフルトーナメントを行うと下図のようにトーナメントが行われ、結果の順位順に選手を並べると となります。
高橋君は、選手の番号をトーナメントの結果の順位順に書いた紙を持っていましたが、いくつかの場所が汚れて読めなくなってしまいました。 この紙の情報は長さ の数列 として与えられ、 が 以上のときは 位の選手の番号が であったことを表し、 のときは 位の選手の番号が分からなくなってしまったことを表します。
最初の選手の並び順として考えられるものが存在するかどうかを判定し、存在するならば例を つ答えてください。
制約
- には 以外の整数は重複して含まれていない。
入力
入力は以下の形式で標準入力から与えられる。
出力
最初の選手の並び順として考えられるものが存在する場合は YES
と出力し、 行目に選手の番号を順番に空白区切りで出力せよ。
存在しない場合は代わりに NO
と出力せよ。
3
0 3 0 6 0 0 0 8
YES
3 4 8 6 2 1 7 5
問題文中の例と同じ並び順です。
1
2 1
NO