D. Башня из коробок
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Это интерактивная задача.

Кибер-акула Зубастик$$$^{\dagger}$$$ работает на складе и складывает коробки в одну вертикальную башню. Высота башни не ограничена, но акула может снимать с башни и класть на неё только верхнюю коробку. Также рядом есть буфер — свободная площадка, на которой можно временно держать коробки (в буфере может лежать любое количество коробок).

Коробки нумеруются в порядке прибытия, начиная с $$$1$$$. Для каждой коробки известен момент времени $$$t_j$$$, когда её нужно извлечь со склада.

В процессе работы происходят события двух типов:

  • + t — пришла новая коробка, которую нужно извлечь в момент времени $$$t$$$ $$$(1 \le t \le T)$$$. Все значения $$$t$$$ различны.
  • - j — наступил момент времени $$$t_j$$$, и требуется извлечь коробку с номером $$$j$$$.

Действия. Во время обработки события акула может выполнять следующие операции:

  • 1 j — положить коробку $$$j$$$ на вершину башни (разрешено только если коробка $$$j$$$ лежит в буфере).
  • 2 j — положить коробку $$$j$$$ в буфер (разрешено только если коробка $$$j$$$ лежит на вершине башни).

Правила обработки событий.

  • При событии + t новая коробка сразу помещается в буфер. К концу обработки этого события буфер должен быть пустым.
  • При событии - j к концу обработки этого события в буфере должна остаться ровно одна коробка — коробка $$$j$$$. После этого коробка $$$j$$$ считается извлечённой и удаляется из системы.

Ваша задача — для каждого события вывести набор операций, который корректно обработает это событие.

$$$^{\dagger}$$$ см. рис.

Кибер-акула Зубастик
Входные данные

В первой строке вводится $$$T$$$ — число моментов времени для рассмотрения.

В $$$i$$$-й из последующих $$$T$$$ строк вводится описание очередного события, происходящего в момент времени $$$i$$$, в следующем формате:

  • + t — пришла новая коробка, которая должна быть убрана в момент времени $$$t$$$ $$$(1 \le t \le T)$$$. (Коробки нумеруются в порядке прибытия). После обработки этого события буфер должен быть пустым.
  • - j — для коробки $$$j$$$ наступило время её достать. После обработки этого события в буфере должна остаться коробка $$$j$$$.
Выходные данные

Для очередного события необходимо вывести последовательность операций, которая его обработает.

Сначала целое число $$$K$$$ — число операций.

Затем список из $$$K$$$ операций — для каждой два числа:

  • Тип операции (1 или 2).
  • Затем номер коробки, с которой операция производится.

Суммарное число выведенных операций по всем событиям не должно превосходить $$$10^6$$$. Если это ограничение нарушено, решение получит вердикт Wrong Answer.

Протокол взаимодействия

Сначала ваша программа должна считать целое число $$$T$$$ — количество событий.

Затем для каждого $$$i = 1,2,\dots,T$$$ интерактор выводит строку с описанием события, происходящего в момент времени $$$i$$$:

  • + t — пришла новая коробка, которую нужно извлечь в момент времени $$$t$$$ $$$(1 \le t \le T)$$$. Коробка получает следующий по порядку номер. К концу обработки события буфер должен быть пустым.
  • - j — требуется извлечь коробку $$$j$$$. К концу обработки события в буфере должна остаться ровно одна коробка $$$j$$$.

После получения очередного события ваша программа должна вывести ответ для него в следующем формате:

  • в первой строке целое число $$$K$$$ — количество операций для обработки текущего события;
  • далее $$$K$$$ строк, в каждой две целых величины: тип операции ($$$1$$$ или $$$2$$$) и номер коробки $$$j$$$.

Чтобы получить следующее событие, вы должны вывести корректный ответ для текущего события и завершить строку символом перевода строки.

После вывода ответа обязательно сбросьте буфер вывода:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python.

Обратите внимание, что для более быстрой работы вывода стоит вызывать flush (или endl) после вывода всех $$$K$$$ операций, а не после каждой операции.

Интерактор в этой задаче не адаптивный: в рамках одного теста последовательность событий фиксирована и не меняется в зависимости от ваших ответов.

Система оценки

В этой задаче тесты двух видов.

Тест первого вида — генерируется массив [1, 1, 2, 2, ..., N, N] и случайным образом перемешивается, получается массив $$$[a_1, a_2, \dots, a_T]$$$ размера $$$T$$$, $$$T = 2N$$$. Тогда очередная коробка добавляется в момент времени $$$t_1$$$ и достаётся в момент времени $$$t_2$$$, если $$$t_1 \lt t_2$$$ и $$$a[t_1] = a[t_2]$$$.

Тест второго вида — гарантируется, что коробки достаются в том же порядке, в котором добавляются.

Для каждого значения $$$N$$$ (числа коробок) сгенерировано по одному тесту каждого вида.

ГруппаТестыЗначения $$$N$$$БаллыНакопленная суммаЗависимости
11-2Тесты из условия0 за тест0-
23-10100, 200, 330, 4201 за тест8-
311-18480, 720, 820, 10801 за тест161
419-261240, 1420, 1630, 18701 за тест241-2
527-302150, 24701 за тест281-3
531-342840, 32602 за тест361-3
635-423740, 4300, 4940, 56802 за тест521-4
743-506530, 7500, 8620, 99102 за тест681-5
851-5811390, 13090, 15050, 173002 за тест841-6
959-6617500, 18000, 18500, 190002 за тест1001-7
Примеры
Входные данные
4
+ 3
+ 4
- 1
- 2
Выходные данные
1
1 1
3
2 1
1 2
1 1
1
2 1
1
2 2
Входные данные
8
+ 8
+ 3
- 2
+ 7
+ 6
- 4
- 3
- 1
Выходные данные
1
1 1
1
1 2
1
2 2
1
1 3
1
1 4
1
2 4
1
2 3
1
2 1