D. Калькулятор степеней
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

Пете в руки попался необычный калькулятор. В нем нет привычных кнопок «+», «-», «*» и «/». Может быть это и к лучшему, ведь кнопки для набора цифр («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)} $$$$$$