Задача №114483. Комбокамень

дна большая компания разрабатывает компьютерную игру «Комбокамень», которая должна мигом перевернуть всю индустрию. Правила игры достаточно сложные, и на реализацию серверного движка, моделирующего ход игры, был объявлен конкурс. От вас требуется реализовать подобный серверный движок.

Суть игры — игроки умеют призывать на арену и усиливать существ, используя заклинания, а также заставлять их сражаться друг с другом. Каждое существо имеет два параметра — численное значение атаки \(a\) и численное значение оставшегося здоровья \(h\). Для краткости будем обозначать параметры существа как \((a, h)\). Исходно на арене нет существ.

Игроку доступны следующие заклинания:

  • Призыв существа : Призвать новое существо с характеристиками \((1, 1)\). Если уже в игру было введено \(k\) существ, то новое существо получает номер \(k+1\).
  • Благословение силы : Удвоить атаку выбранного существа. Если до применения этого заклинания оно имело характеристики \((a, h)\), то после этого действия оно будет иметь характеристики \((2a, h)\).
  • Божественный дух : Удвоить здоровье выбранного существа. Если до применения этого заклинания оно имело характеристики \((a, h)\), то после этого действия оно будет иметь характеристики \((a, 2h)\).
  • Копия из лавы : Призвать новое существо, которое будет иметь такие же характеристики, как и выбранное заклинанием существо. Если уже в игру было введено \(k\) существ, то новое существо получает номер \(k+1\).
  • Сражайся! : Заставить двух различных существ сразиться. Во время сражения оба существа одновременно наносят друг другу по одному удару, уменьшая количество здоровья соперника на значение своей атаки. Так, если сражаются два существа с характеристиками \((a_1, h_1)\) и \((a_2, h_2)\), то после сражения они будут иметь характеристики \((a_1, h_1-a_2)\) и \((a_2, h_2-a_1)\), соответственно. Если после сражения у существа остается 0 или меньше единиц здоровья, оно умирает и больше не может участвовать в игре.

От серверного движка, на реализацию которого объявлен конкурс, требуется способность промоделировать все события и для каждого созданного во время игры существа вывести номер хода, на котором оно погибло, либо определить, что оно осталось живо к концу игры.

Кроме того, движок должен корректно обрабатывать случаи, когда игрок пытается взаимодействовать с мертвыми по мнению сервера существами: если заклинание Благословение силы , Божественный дух или Сражайся! обращено к уже мертвому существу, то не должно произойти ничего. Если заклинание Копия из лавы применено к мертвому существу, создается его мертвая копия с такими же характеристиками, но умершая на текущем ходу, в момент копирования.

Входные данные

В первой строке дано число \(n\) — количество совершенных ходов (\(1 \le n \le 250\,000\)).

В следующих \(n\) строках даны ходы, пришедшие к серверному движку, в следующем формате:

  • \(1\) — применить заклинание Призыв существа ;
  • \(2\) \(i\) — применить заклинание Благословение силы к существу с номером \(i\);
  • \(3\) \(i\) — применить заклинание Божественный дух к существу с номером \(i\);
  • \(4\) \(i\) — применить заклинание Копия из лавы к существу с номером \(i\);
  • \(5\) \(i\) \(j\) — применить заклинание Сражайся! к существам с номерами \(i\) и \(j\).

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

Выходные данные

В первой строке выведите одно целое число \(k\) — количество существ, призванных за время игры.

В следующей строке выведите \(k\) целых чисел \(t_1, t_2, \ldots, t_k\) — если существо с номером \(i\) осталось живо к концу игры, то \(t_i\) должно быть равно \(-1\), иначе \(t_i\) должно быть равно номеру хода, на котором оно погибло.

Примечание

В таблице можно увидеть, как изменялись характеристики существ в первом примере.

ход

1 2 3 4 5

0

- - - - -
1 (1, 1) - - - -
2 (2, 1) - - - -
3 (2, 2) - - - -
4 (2, 2) (1, 1) - - -
5 (2, 1) мертво - - -
6 (2, 2) мертво - - -
7 (2, 2) мертво (1, 1) - -
8 (2, 2) мертво (1, 2) - -
9 (2, 2) мертво (1, 4) - -
10 (2, 2) мертво (1, 4) (2, 2) -
11 (2, 1) мертво (1, 2) (2, 2) -
12 (2, 1) мертво (1, 4) (2, 2) -
13 мертво мертво (1, 2) (2, 2) -
14 мертво мертво мертво (2, 1) -
15 мертво мертво мертво (2, 1) -
16 мертво мертво мертво (2, 1) мертво
Примеры
Входные данные
16
1
2 1
3 1
1
5 1 2
3 1
1
3 3
3 3
4 1
5 1 3
3 3
5 1 3
5 4 3
5 4 3
4 1
Выходные данные
5
13 5 14 -1 16 
Сдать: для сдачи задач необходимо войти в систему