Задача Е. Играем калькулятор
Задачу добавил: alef
Успешно сдано решений: 30
Во время совместного катания Маша и Витя иногда развлекаются устным счетом. Например, Маша говорит Вите: «Запомни число 12. Так, а теперь запомни еще число 27. И еще число 3. Нет, забудь его. Запомни лучше 5! Запомнил? А теперь сложи два последних числа. И умножь то, что помнишь, на то, что получилось. Сколько?» (Да, 384, Вы не ошиблись). Действий может быть много. В какие-то моменты Маша (или Витя, если ведущим был он) спрашивает «Сколько?» — и они оба хором произносят число. Чаще всего ответы у них совпадают, но когда расходятся — спорить можно до бесконечности, кто и где ошибся: ведь ничего же не записывается.
Однажды они предложили Пете поиграть вместе с ними. Когда его ответ в очередной раз не совпал с ответом у Маши и у Вити, он предложил все же вести запись действий, чтобы узнать, какой же должен получиться ответ на самом деле.
Ваша задача — по имеющейся записи получить все ответы на вопросы «Сколько?». Запись велась следующим образом (<число> — некоторое целое число от 0 до 10^8):
push <число> — запомнить число
pop — забыть последнее запомненное число
add — сложить два последних запомненных числа, забыть их и запомнить вместо них результат
sub — вычесть из предпоследнего запомненного числа последнее запомненное, забыть их и запомнить вместо них результат
mul — перемножить два последних запомненных числа, забыть их и запомнить результат
div — поделить предпоследнее запомненное число на последнее запомненное число нацело (без остатка), забыть оба эти числа и запомнить вместо них результат
mod — вычислить остаток от деления предпоследнего запомненного числа на последнее запомненное, забыть их и запомнить вместо них результат
print — ответить на вопрос «Сколько?»
Поскольку в некоторых случаях может произойти попытка выполнить деление на 0, то результатом будет NaN («Не число», Not a Number). Также NaN получится и при любой другой операции, если одним из операндов будет NaN, или же если операндов для выполнения операции не хватает.
Формат входного файла input.txt
Первая строка — целое число N (1 <= N <=100) — количество команд в имеющейся записи.
В каждой из следующих N строк размещена одна команда описанного выше вида. Число после команды push — всегда целое неотрицательное число, не превосходящее 10^8. Гарантируется, что все числа, получаемые в процессе вычислений, находятся в диапазоне от 0 до 10^8. Также гарантируется, что среди команд не встречается команда push NaN.
Последняя команда (#N) во входном файле всегда print.
Формат выходного файла output.txt
В выходном файле содержится столько строк, сколько раз во входном файле встречается команда print. В каждой из этих строк записан результат, который должен был получиться у ребят к этому моменту.
Пример входного файла — 1
28
push 7
push 5
add
push 7
push 5
sub
push 7
push 5
mul
push 7
push 5
div
push 7
push 5
mod
add
add
add
add
Пример выходного файла — 1
12
2
35
1
2
3
38
40
52
Пример входного файла — 2
12
push 1
push 10
push 10
mul
mul
push 2
push 10
mul
add
push 1
add
Пример выходного файла — 2
121
Пример входного файла — 3
9
push 1
add
pop
push 1
push 0
div
Пример выходного файла — 3
NaN
NaN
NaN