この問題はインタラクティブ問題です。各行を出力した後、出力バッファをフラッシュする必要があります。C++ では cout << flush、Java では System.out.flush()、Python では sys.stdout.flush() を使用できます。「入出力形式」セクションの指示に厳密に従ってください。そうしない場合、不正解(Wrong Answer)や実行時間制限超過(Time Limit Exceeded)などの判定を受ける可能性があります。
鉱山での作業は過酷で時間がかかるため、ドワーフたちは作業の一部を自動化するために助けを求めることにしました。彼らの現在の課題は、$N$ 個の鉱物($1$ から $N$ までの番号で識別される)を異なるクラスに分類することです。これを支援するため、作業員ドワーフは新しいベルトコンベアを設置しました。ドワーフたちはベルトの先頭に鉱物のサンプルを追加し、末尾からそれらを取り除く(つまり、最も早く追加された鉱物を取り除く)ことができます。
残念ながら、このベルトコンベアには知識ベースがないため、ベルト上のどの鉱物のクラスも特定できません。しかし、別の便利な機能があります。それは、現在ベルト上にある鉱物の異なるクラスの数を表示することです。ドワーフたちは各鉱物のクラスを知る必要はなく、同じクラスの山に鉱物を分けるだけでよいため、鉱山にとってはこれで十分であることが分かりました。
ベルトコンベアを使ってドワーフたちがこの課題を解決するのを手伝ってくれますか?
入出力形式
鉱物のクラスは最初に固定されており、行われたクエリには依存しません。
まず、分類する鉱物の数を表す $N$ を含む行を $1$ 行読み込みます。その後、次の $2$ 種類の操作を行うことができます。
+ id— 識別子idの鉱物をベルトコンベアの先頭に追加する。-— ベルトコンベアの末尾にある鉱物を取り除く。ベルトが空の場合は何も起こらない。
各操作の後、ベルトコンベアは現在ベルト上にある異なるクラスの数を表す $1$ 行を出力します。
答えを出力するには、まず ! に続けて鉱山内の異なるクラスの数 $k$ を含む行を出力します。次に、各クラスを説明する $k$ 行を出力します。各行には、数値 $c_i$ に続けて、そのクラスに属する $c_i$ 個の鉱物の識別子を含める必要があります。$N$ 個の鉱物はすべて、ちょうど $1$ つのクラスに現れなければなりません。クラスおよび各クラス内の鉱物は任意の順序で出力して構いません。
各操作の後、および答えを出力した後は、必ず出力をフラッシュしてください。数値と +、-、! 記号の間には必ず空白を入れてください。ジャッジからのすべてのデータを読み取る必要があります。
制約
$1 \le N \le 500$、操作は最大 $35\,000$ 回まで行うことができます。
入出力例
入力例 1
3 1 2 2 2
出力例 1
+ 1 + 2 + 3 - ! 2 2 1 3 1 2
注記
最初のサンプルテストでは、$N = 3$ であり、鉱物 $1, 2, 3$ のクラスはそれぞれ $1, 2, 1$ です。
ローカルテスト
Files セクションには、サンプルテストとグレーダー grader.cpp を含む A.zip があります。解答をテストするには、コンパイルしてから、テスト名と実行可能ファイルをコンパイル済みの ./grader に渡してください。
./grader [test] [executable]
例:./grader 0b.in ./abc
サンプルグレーダーは公式のものと完全に同じように動作するとは限りません。ただし、どちらも適応型(adaptive)ではありません。