Это интерактивная задача. После вывода каждой строки необходимо сбрасывать буфер вывода (flush). Вы можете использовать cout << flush в C++, System.out.flush() в Java и sys.stdout.flush() в Python. Вы должны строго следовать инструкциям в разделе «Протокол взаимодействия», иначе вы можете получить вердикт «неправильный ответ» (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$ соответственно.
Локальное тестирование
В разделе Files вы можете найти архив A.zip, содержащий примеры тестов и грейдер grader.cpp. Чтобы протестировать свое решение, скомпилируйте его, а затем передайте имя теста и ваш исполняемый файл скомпилированному ./grader:
./grader [test] [executable]
Например: ./grader 0b.in ./abc
Не гарантируется, что поведениe примера грейдера полностью совпадает с официальным. Однако ни один из них не является адаптивным.