Олимпиадный тренинг

Задача . D. Сюрикены


Тентен продает оружие в магазине для ниндзя. Сегодня она хочет продать \(n\) сюрикенов стоимостью \(1\), \(2\), ..., \(n\) рё (местная валюта). В течение дня она будет выкладывать сюрикены на витрину, которая в начале дня пуста. Работа в магазине достаточно простая: в каждый момент времени либо Тентен выкладывает на витрину очередной сюрикен из еще не выложенных, либо к ней в магазин заходит ниндзя и покупает сюрикен с витрины. Поскольку ниндзя очень экономные, то в магазине они покупают самый дешевый из сюрикенов, которые сейчас лежат на витрине. В течение дня Тентен ведет список событий, и в ее списке есть два типа записей:

  • + означает, что она выкладывает на витрину очередной сюрикен;
  • - x означает, что у нее купили сюрикен стоимостью \(x\).

Сегодня у Тентен выдался удачный день, и у нее купили все сюрикены. В конце дня ей стало интересно, не ошиблась ли она в своих записях, и в каком порядке она могла выкладывать сюрикены, чтобы у нее получился такой список.

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

В первой строке дано целое число \(n\) (\(1\leq n\leq 10^5\)) — количество сюрикенов.

В следующих \(2n\) строках дана информация о произошедших событиях в формате, описанном выше. Гарантируется, что среди событий ровно \(n\) событий первого типа, а также, что во всех событиях второго типа присутствуют все числа от \(1\) до \(n\) по одному разу.

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

Необходимо вывести «YES», если такой список мог получиться, и «NO» иначе.

Если список получиться мог, то в следующей строке необходимо вывести \(n\) различных чисел через пробел — стоимости сюрикенов в порядке, в котором Тентен должна выкладывать их на витрину. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Тентен сначала выложила на витрину сюрикены стоимостью \(4\) и \(2\). После этого к ней пришел покупатель и забрал самый дешевый сюрикен стоимостью \(2\). После этого к оставшемуся сюрикену стоимостью \(4\) она выложила сюрикен стоимостью \(3\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(3\). После этого она выложила сюрикен стоимостью \(1\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(1\). Потом к ней пришел еще один покупатель и забрал последний сюрикен стоимостью \(4\). Обратите внимание, что порядок \([2, 4, 3, 1]\) также является верным.

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

В третьем примере Тентен выложила на витрину все сюрикены, после этого к ней пришел покупатель и забрал сюрикен стоимостью \(2\). Такого быть не могло, потому что этот сюрикен не был самым дешевым из тех, что лежали на витрине (ведь там был еще сюрикен стоимостью \(1\)).


Примеры
Входные данныеВыходные данные
1 4
+
+
- 2
+
- 3
+
- 1
- 4
YES
4 2 3 1
2 1
- 1
+
NO
3 3
+
+
+
- 2
- 1
- 3
NO

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя