本題為互動題。在輸出每一行之後,請務必重新整理輸出緩衝區。在 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)的。