#arc070d. [arc070_d]HonestOrUnkind
[arc070_d]HonestOrUnkind
問題文
これはインタラクティブな問題です。
シカのAtCoDeerくんは ~ の番号がついた 人の人が集まっているのを見つけました。 この内 人は_正直者_で、残りの 人は_不親切な人_です。 人の人は全員、誰が_正直者_で、誰が_不親切な人_かを把握しています。 一方、AtCoDeerくんは、_正直者_が 人いて_不親切な人_が 人いることしか知りません。 そこで、AtCoDeerくんはこれらの 人に質問をして、_正直者_を全員特定しようとしています。 一回の質問では、AtCoDeerくんは、 なる , を選んで、 さんに「 さんは_正直者_ですか?」という質問をします。
_正直者_は、質問に対し常に Yes か No の正しい答えを返します。 一方、_不親切な人_は、質問に対し Yes か No のどちらかを恣意的に選んで返します。 つまり、常に嘘をついたり、半分の確率でランダムに答えるといった単純なアルゴリズムではない可能性があります。
AtCoDeerくんは高々 回質問をすることができます。質問は順番に行われ、以前の質問の結果から次の質問を決めることが出来ます。
_正直者_を全員特定してください。 不可能な場合(正確には、どのような 回の質問をしようと、_不親切な人_たちがうまく返答することで、_正直者_の集合としてありうるものが2つ以上存在するようにできる場合)は、その旨を出力してください。
制約
入出力
最初に、標準入力から と が以下の形式で与えられる:
もし特定が不可能な場合は、即座に次のように出力し、プログラムを終了しなければならない。:
Impossible
それ以外の場合は、次に、クエリを質問する。 各クエリは、標準出力に以下の形式で出力されなければならない:
?
ここで と は 以上 以下の整数でなければならない。
次に、クエリの答えが標準入力から以下の形式で与えられる:
ここで は Y
または N
である。 Y
のときは質問の答えが Yes であることを、N
のときは No であることを表す。
最後に、答えを以下の形式で出力しなければならない:
!
ここで は 番の人が_正直者_なら 1
、_不親切な人_なら 0
でなければならない。
ジャッジ
- 出力のあと、標準出力を flush しなければならない。 そうでないときは
TLE
の可能性がある。 - 答えを出力した後、プログラムをすぐに終了しなければならない。そうでないときの挙動は定義されていない。
- 出力の答えが間違っている場合の挙動は定義されていない (
WA
とは限らない)。
サンプル
このサンプルでは , で、答えは 101
である。
Input
Output
次のサンプルでは , で、答えは Impossible
である。
Input
Output