Рассмотрим упрощенную версию книги заявок некоторой акции.
Книга заявок — это список заявок (предложений) от людей, которые хотят купить или продать одну акцию, каждая заявка описывается направлением (BUY или SELL) и ценой.
В каждый момент времени у любой SELL заявки цена больше, чем у любой BUY заявки.
В этой задаче цены всех когда-либо существовавших заявок различны.
Заявка с направлением SELL с наименьшей ценой и заявка с направлением BUY с наибольшей ценой называются лучшими предложениями и выделены черной рамкой на рисунке.
В книге заявок возможны два события:
Можно добавлять новые заявки BUY только с ценами ниже лучшего SELL предложения (если вы хотите купить по более высокой цене, то вместо постановки заявки нужно принять лучшее SELL предложение). Аналогично нельзя добавлять SELL заявки с ценами меньшими или равными лучшему предложению BUY. К примеру, нельзя добавить заявку "SELL $$$20$$$", если уже есть заявка "BUY $$$20$$$" или "BUY $$$25$$$" — в этом случае нужно просто принять лучшее предложение BUY.
У вас есть поврежденный лог событий в книге заявок (в начале никаких заявок в книге нет). В логе есть события двух типов:
Направления всех заявок (BUY или SELL) в логе утеряны. Не всегда по имеющимся данным можно однозначно восстановить эти направления. Посчитайте количество способов корректно восстановить направления ADD заявок так, что описанные условия всегда выполнены. Ответ может быть очень большим, поэтому выведите его по модулю $$$10^9 + 7$$$. Если невозможно корректно восстановить направления, то выведите $$$0$$$.
В первой строке задано целое число $$$n$$$ ($$$1 \le n \le 363\,304$$$) — количество событий в логе.
Каждая из следующих $$$n$$$ строк содержит слово "ACCEPT" или "ADD" и целое число $$$p$$$ ($$$1 \le p \le 308\,983\,066$$$), описывающих тип события и цену.
Все события типа ADD имеют разные цены. Для события ACCEPT гарантируется, что заявка с такой ценой уже была добавлена и еще не был принята (не участвовала в сделках).
Выведите число способов восстановить направления всех заявок ADD по модулю $$$10^9 + 7$$$.
6
ADD 1
ACCEPT 1
ADD 2
ACCEPT 2
ADD 3
ACCEPT 3
8
4
ADD 1
ADD 2
ADD 3
ACCEPT 2
2
7
ADD 1
ADD 2
ADD 3
ADD 4
ADD 5
ACCEPT 3
ACCEPT 5
0
В первом примере каждая из заявок может быть и BUY, и SELL.
Во втором примере заявка с ценой $$$1$$$ должна иметь направление BUY, заявка с ценой $$$3$$$ должна иметь направление SELL.
Название |
---|