eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Юпитер атакует!

Юпитер атакует!

Юпитер наступает! Крупные города разрушены космическими аппаратами Юпитера и человечество наносит ответный удар. Логония возглавляет контрнаступление, взламывая систему управления космическими аппаратами. В отличие от компьютеров Землян, в которых в байт помещается до \textbf{28} возможных значений, компьютеры Юпитера используют байты с \textbf{B }возможными значениями \textbf{\{0, 1, ..., B-1\}}. Инженеры программного обеспечения Логонии вскрыли технологию микропрограммы космических аппаратов Юпитера и планируют организовать диверсию, в результате которой бы все корабли в конечном итоге самоуничтожились. В качестве меры безопасности, однако, в космических аппаратах Юпитера работают надзорные программы, периодически проверяющие целостность прошивки путем хеширования его части и сравнения результата с требуемыми значениями. Для хеширования части прошивки в байте с позиции \textbf{i} до байта в позиции \textbf{j}, управляющая программа использует следующую функцию \includegraphics{https://static.e-olymp.com/content/a3/a330686dbf85d0929177a273bafceee912393a91.jpg} где \textbf{P} - простое число. Например, если \textbf{B = 20} и \textbf{P = 139}, а байты от \textbf{2} до \textbf{5} прошивки имеют значения \textbf{f_2 = 14}, \textbf{f_3 = 2}, \textbf{f_4 = 2} и \textbf{f_5 = 4}, то \textbf{H(f2, ..., f_5) = B^0f_5 + B^1f_4 + B^2f_3 + B^3f_2 (mod P)} \textbf{= 20^0×4 + 20^1×2 + 20^2×2 + 20^3×14 (mod 139)} \textbf{= 4 + 40 + 800 + 112000 (mod 139)} \textbf{= 112844 (mod 139)} \textbf{= 115} Криптологам Логонии необходимо найти способ, чтобы саботировать прошивку без отключения управляющей программы. Первым делом Вас назначили написать программу, имитирующую чередование двух типов команд: редактирование байта прошивки инженерами программного обеспечения Логонии, и вычисление хешей частей прошивки управляющей программы Юпитера. В начале моделирования значение каждого байта в прошивке равно нулю. \InputFile Каждый тест задается в нескольких строках. Первая строка содержит четыре целых числа \textbf{B}, \textbf{P}, \textbf{L }и\textbf{ N}, где \textbf{B} - количество возможных значений в байте Юпитера, \textbf{P} - модуль хеша Юпитера (\textbf{2 }≤ \textbf{B }< \textbf{P }≤ \textbf{10^9}, \textbf{P} - простое), \textbf{L }- длина (количество байт Юпитера) прошивки космического корабля, \textbf{N} - число команд, которое следует промоделировать (\textbf{1 }≤ \textbf{L}, \textbf{N }≤ \textbf{10^5}). В начале моделирования значение каждого байта прошивки равно \textbf{f_i = 0 }для \textbf{1 }≤ \textbf{i }≤ \textbf{L}. Каждая из следующих \textbf{N} строк задает команду, которую следует промоделировать. Каждая такая команда начинается или с '\textbf{E}', или с '\textbf{H}', означающие следующее. '\textbf{E}' → строка описывает команду редактирования. За буквой следуют два целых числа \textbf{I }и \textbf{V}, означающие что байт в позиции \textbf{I} прошивки (то есть \textbf{f_I}) должен принять значение \textbf{V }(\textbf{1 }≤ \textbf{I }≤ \textbf{L }и \textbf{0 }≤ \textbf{V }≤ \textbf{B - 1}). '\textbf{H}' → строка описывает команду хеширования. За буквой следуют два целых числа \textbf{I }и \textbf{J}, означающие что следует вычислить \textbf{H(f_I, ..., f_J) }(\textbf{1 }≤ \textbf{I }≤ \textbf{J} ≤ \textbf{L}). За последним тестом следует строка из четырех нулей. \OutputFile Для каждого теста следует вывести результаты команд хеширования. В \textbf{i}-ой строке вывести целое число, являющееся результатом \textbf{i}-ой команды хеширования. После каждого теста вывести строку из одного символа '\textbf{-}' (дефис).
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
20 139 5 7
E 1 12
E 2 14
E 3 2
E 4 2
E 5 4
H 2 5
E 2 14
10 1000003 6 11
E 1 3
E 2 4
E 3 5
E 4 6
E 5 7
E 6 8
H 1 6
E 3 0
E 3 9
H 1 3
H 4 6
999999935 999999937 100000 7
E 100000 6
E 1 7
H 1 100000
E 50000 8
H 1 100000
H 25000 75000
H 23987 23987
0 0 0 0
Выходные данные #1
115
-
345678
349
678
-
824973478
236724326
450867806
0
-
Источник ACM ICPC Latin America 2011, November 4th-5th, 2011