呢題係交互題。喺輸出每一行之後,請務必刷新輸出緩衝區。喺 C++ 入面可以用 cout << flush;喺 Java 入面可以用 System.out.flush();喺 Python 入面可以用 sys.stdout.flush()。你必須嚴格遵守「交互格式」部分嘅說明,否則可能會收到 Wrong Answer、Time Limit Exceeded 或者其他結果。
由於礦井入面嘅工作又辛苦又費時,矮人們決定尋求幫助嚟將部分任務自動化。佢哋目前嘅任務係將 $N$ 個礦石(編號由 $1$ 到 $N$)分類到唔同嘅類別入面。為咗輔助呢項工作,工人矮人安裝咗一條新嘅傳送帶。矮人們可以將礦石樣本加到傳送帶嘅開頭,並從末端將佢哋移除(即係移除最早加入嘅礦石)。
不幸嘅係,呢條傳送帶冇知識庫,所以佢認唔出傳送帶上面任何礦石嘅類別。不過,佢有另一個好有用嘅功能:佢會顯示目前傳送帶上面有幾多種唔同嘅礦石類別。事實證明,呢點對礦井嚟講已經足夠,因為矮人們唔需要知道每個礦石嘅具體類別:佢哋只需要將礦石按相同類別分堆就得。
你能唔能夠利用呢條傳送帶幫矮人們完成呢項任務?
交互格式
礦石嘅類別喺一開始就已經固定,唔會取決於你作出嘅查詢。
首先,讀取一行,包含一個整數 $N$,代表要分類嘅礦石數量。跟住,你可以執行以下兩種類型嘅操作:
+ id— 將編號為id嘅礦石加到傳送帶嘅開頭。-— 移除傳送帶末端嘅礦石。如果傳送帶係空嘅,則唔會發生任何事。
每次操作之後,傳送帶會輸出一行,包含目前傳送帶上面唔同類別嘅數量。
要輸出答案,首先印出一行,包含 ! 後面跟住 $k$,即礦井入面唔同類別嘅數量。跟住印出 $k$ 行,每行描述一個類別。每行應該包含一個數字 $c_i$,後面跟住屬於該類別嘅 $c_i$ 個礦石編號。$N$ 個礦石入面嘅每一個都必須出現喺恰好一個類別入面。你可以按任意順序輸出各個類別以及每個類別入面嘅礦石。
請記住喺每次操作之後同埋寫出答案之後刷新輸出緩衝區。請記住喺數字同 +、-、! 符號之間留空格。你必須讀取來自交互器嘅所有數據。
數據範圍
$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$。
本地測試
喺「檔案」部分,你可以搵到包含樣例測試同評測器 grader.cpp 嘅 A.zip。要測試你嘅解答,請先編譯佢,然後將測試名稱同你嘅可執行檔傳遞畀編譯好嘅 ./grader:
./grader [test] [executable]
例如:./grader 0b.in ./abc
樣例評測器唔保證同官方評測器嘅行為完全一致。不過,兩者都唔係自適應(adaptive)嘅。