| BSUIR Open X. Reload. Semifinal |
|---|
| Закончено |
Пете в руки попался необычный калькулятор. В нем нет привычных кнопок «+», «-», «*» и «/». Может быть это и к лучшему, ведь кнопки для набора цифр («0», «1», ..., «9») и получения результата («=») расположены на своих местах. Но что самое необычное в этом калькуляторе, так это наличие кнопок «^{}» и «^{}^{}».
После долгих опытов с этим калькулятором, Петя выяснил, что значат эти кнопки.
Кнопка «^{}» означает операцию возведения в степень $$$a^b$$$. Например, если ввести в калькуляторе выражение «2^{}3», то в результате, он выведет число $$$2^3 = 8$$$.
Кнопка «^{}^{}» означает выполнение тетрации $$$\displaystyle {^{b}a}=\underbrace {a^{a^{\cdot ^{\cdot ^{\cdot ^{a}}}}}} _{b}$$$. Например, если ввести выражение «2^{}^{}3», то в результате калькулятор выведет число $$$^{3}2 = 2^{2^2} = 16$$$.
Петя планировал вычислить несколько выражений на этом калькуляторе. К сожалению, его опытов хватило, чтобы разобраться с устройством калькулятора, но их также хватило, чтобы привести калькулятор в неработоспособное состояние.
Помогите Пете вычислить значения оставшихся выражений. Для этого необходимо реализовать программу, обрабатывающую выражение с учетом приоритета операций. Тетрация имеет более высокий приоритет (по сравнению с операцией возведения в степень), поэтому такие операции должны быть выполнены в первую очередь. Также нужно учитывать, что вычисление степеней и тетраций необходимо начинать с самых дальних уровней к начальному. Например запись «a^{}^{}b^{}^{}c» должна быть вычислена как $$$^{(^{c}b)}a$$$, а выражение «a^{}b^{}c» — как $$$a^{(b^c)}$$$.
В единственной строке задано выражение без пробелов, состоящее из целых положительных чисел, операторов «^{}» (возведение в степень) и операторов «^{}^{}» (тетрация).
Количество символов в строке не превышает $$$100\,000$$$.
Гарантируется, что все числа не содержат лидирующих нулей, выражение начинается и заканчивается числом, в выражении не могут идти два оператора подряд (в строке не встречается более двух символов «^{}»).
Обратите внимание, что количество цифр в числе никак не ограничено.
В единственной строке выведите результат вычисления выражения. Так как результат может быть слишком большим, выведите его по модулю $$$10^9 + 7$$$.
2^^4
65536
42^^1^^2^1^^3
42
20^^2^^2
634985421
1000000013000000042^1000000013000000042
0
Во втором примере выражение имеет следующий вид:
$$$$$$ (^{(^{2}1)}42)^{(^{3}1)} $$$$$$
| Название |
|---|


