Fygon#7617

Fygon

1 секунда
128 мегабайтів
Дуже складна

Фредерик — молодий програміст. Він бере участь у всіх змаганнях з програмування, які тільки може знайти, і завжди пише своєю улюбленою мовою програмування Fygon. На жаль, він часто отримує вердикт Time Limit Exceeded, навіть коли його алгоритм асимптотично оптимальний. Причина в тому, що інтерпретатор Fygon працює дуже повільно. Тим не менш, Фредерик настільки любить Fygon, що вдається до неасимптотичних оптимізацій, щоб уложити свої рішення в обмеження за часом. Щоб спростити собі завдання, він просить вас написати програму, яка обчислює точну кількість операцій, що виконуються його програмою на Fygon.

Для простоти вважатимемо, що у Fygon є лише два види операторів. Перший — lag, який може замінювати майже будь-який інший оператор. Другий — цикл for:

for <variable> in range (<limit>):
    <body>

Тут <variable> набуває всіх значень від до <limit> - . У Fygon <variable> — це рядкова латинська літера від до , а <limit> — або раніше визначена змінна <variable>, або додатна ціла константа. Тіло циклу <body> записується з відступом у чотири пробіли і містить принаймні один оператор.

Програма отримує вхідні дані в змінній . Ця змінна має особливе значення і не може використовуватися як змінна циклу.

Ваше завдання — знайти формулу, яка виражає кількість операцій lag, що виконуються заданою програмою на Fygon, залежно від .

Вхідні дані

Містить програму на Fygon. Жодні два цикли не використовують одну й ту саму змінну як лічильник. Кожна змінна, яка використовується всередині range, — це або , або змінна, оголошена в одному із зовнішніх циклів.

Програма містить не більше операторів, з яких не більше є циклами. Усі цілочисельні константи лежать у діапазоні від до включно.

Вихідні дані

Виведіть формулу для кількості виконуваних операцій lag залежно від . Довжина формули не повинна перевищувати символів (без урахування пробілів), і формула повинна відповідати наступній граматиці:

<Expression> ::= <Product> (('+' | '-') <Product>)*
<Product>    ::= <Value> ('*' <Value>)*
<Value>      ::= 'n' | <Number> | '-' <Value> | '(' <Expression> ')'
<Number>     ::= ['0'..'9']+ ('/' ['0'..'9']+)?

Приклади

Приклад 1

Loading
Loading