G - Gon Pack Editorial /

Time Limit: 1 sec / Memory Limit: 1024 MiB

配点 : 800 点 (部分点あり)

くろうさ「https://codeforces.com/contest/1991/problem/F

しろうさ「これって n = 6 だと分割 10 通り全探索しなきゃいけないの?」

くろうさ「そんなことないよ」

しろうさ「意外と 1 通りくらいスキップしても落ちないことがあるのかぁ」

くろうさ「ということで今年は 171 問持ってきたよ」

しろうさ「大量の提出はお控えくださいね」

問題文

N を正整数とする.

集合 \{1, 2, \ldots, 2N\}N 元集合 2 個への分割全体を \mathcal{P} とする.\lvert \mathcal{P} \rvert = \frac{1}{2} \binom{2N}{N} である.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} \in \mathcal{P} である.

1 \le a_1 < a_2 < \cdots < a_{2N} を満たす整数組 (a_1, a_2, \ldots, a_{2N}) に対し,良い分割とは,P \in \mathcal{P} であって,任意の I \in P に対し,辺の長さの集合が \{ a_i \mid i \in I \} となる非退化単純 N 角形が存在することとする.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} が良い分割であるための条件は,a_1, a_5, a_6 が三角形の 3 辺の長さかつ a_2, a_3, a_4 が三角形の 3 辺の長さとなることである.

N および,P \in \mathcal{P} が与えられる.良い分割がちょうど P のみであるような整数 1 \le a_1 < a_2 < \cdots < a_{2N} は存在するか?

  • 存在するとき,そのような (a_1, a_2, \ldots, a_{2N}) であってさらに a_{2N} \le 10^{17} を満たすものが存在することが証明できる.これらすべてを満たす (a_1, a_2, \ldots, a_{2N})1 つ求めよ.
  • 存在しないとき,次の条件を満たす非負整数 k と分割 Q_1, Q_2, \ldots, Q_k \in \mathcal{P} が存在するので,そのようなもののうち k が最小なものを 1 つ求めよ:
    • j = 1, 2, \ldots, k に対し,Q_j \ne P
    • 任意の 1 \le a_1 < a_2 < \cdots < a_{2N} に対し,P が良い分割ならば,Q_1, Q_2, \ldots, Q_k のうち少なくとも 1 個は良い分割である.

入出力において,\mathcal{P} の元は,N 個の 0N 個の 1 からなる末尾が 1 の文字列で表す.各文字種の index の集合が分割の各元を表す.例えば,N = 3 のとき \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \}100011 で表す.

制約

  • 3 \le N \le 5

部分点

  • 制約を満たすすべての可能な入力データが 1 個ずつ含まれる.各データについて,正解した場合は N 点が与えられる.

入力

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

N P

出力

問題文中の 2 つの場合に応じて,以下のいずれかの形式で出力せよ.

YES a_1 a_2 \cdots a_{2N}
NO k Q_1 Q_2 \cdots Q_k

入力例 1

3 100011

出力例 1

YES 2 4 6 8 10 11

P = \{ \{ 1, 5, 6 \}, \{ 2, 3, 4 \} \} である.

この出力例について,2, 10, 11 は三角形の 3 辺の長さとなり,4, 6, 8 も三角形の 3 辺の長さとなるので,P が良い分割になっている.他の分割が良い分割にならないこともわかる.


入力例 2

3 100101

出力例 2

NO 1 100011

P = \{ \{ 1, 4, 6 \}, \{ 2, 3, 5 \} \} である.

以下の 3 個の条件

  • 1 \le a_1 < a_2 < a_3 < a_4 < a_5 < a_6
  • a_1, a_4, a_6 が三角形の 3 辺の長さとなる
  • a_2, a_3, a_5 が三角形の 3 辺の長さとなる

が成り立つならば,以下の 2 個の条件

  • a_1, a_5, a_6 が三角形の 3 辺の長さとなる
  • a_2, a_3, a_4 が三角形の 3 辺の長さとなる

が成り立つことがわかる.