Оценщик выражений
ограничение времени на тест
10 секунд
ограничение памяти на тест
128 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Эта задача посвящена оценке некоторых выражений в стиле C. Выражения, которые нужно оценить, будут содержать только простые целочисленные переменные и ограниченный набор операторов; в выражениях не будет констант. В программе есть 26 переменных, обозначенных строчными буквами от $$$a$$$ до $$$z$$$. Перед оценкой начальные значения этих переменных равны $$$a = 1$$$, $$$b = 2$$$, ..., $$$z = 26$$$.

Допустимые операторы - это сложение и вычитание (бинарные + и -), с их известным значением. Таким образом, выражение $$$a + c - d + b$$$ имеет значение 2 ($$$1 + 3 - 4 + 2$$$). Кроме того, в входном выражении также разрешены операторы ++ и --, которые являются унарными операторами и могут стоять перед или после переменных. Если оператор ++ стоит перед переменной, то значение этой переменной увеличивается (на единицу) перед использованием значения переменной для вычисления значения всего выражения. Таким образом, значение $$$++ c - b$$$ равно 2. Когда ++ стоит после переменной, эта переменная увеличивается (на единицу) после того, как ее значение используется для вычисления значения всего выражения. Таким образом, значение $$$c ++ - b$$$ равно 1, хотя $$$c$$$ увеличивается после вычисления значения всего выражения; его значение также будет равно 4. Оператор -- ведет себя аналогично, за исключением того, что он уменьшает значение своего операнда.

Более формально, выражение оценивается следующим образом:

  1. Определите каждую переменную, перед которой стоит ++. Напишите оператор присваивания для увеличения значения каждой из них и опустите ++ перед этой переменной в выражении. Сделайте то же самое для переменных с ++ после них.
  2. На этом этапе в выражении нет оператора ++. Напишите оператор, оценивающий оставшееся выражение после операторов, определенных на шаге 1, и перед теми, которые определены на шаге 2.
  3. Выполните операторы, определенные на шаге 1, затем те, что написаны на шаге 3, и, наконец, тот, что написан на шаге 2.

Таким образом, оценка $$$++ a + b ++$$$ эквивалентна вычислению $$$a = a + 1$$$, результат = $$$a + b$$$, и $$$b = b + 1$$$.

Ввод

Первая строка ввода содержит одно целое число $$$T$$$, которое является количеством тестовых случаев, за которым следуют $$$T$$$ строк, каждая из которых содержит входное выражение для тестового случая. Игнорируйте пробелы во входном выражении. Убедитесь, что во входных выражениях нет неоднозначности (например, $$$a+++b$$$). Аналогично, операторы ++ или -- не появляются одновременно перед и после одной переменной (например, $$$++a++$$$). Вы можете быть уверены, что каждая переменная появляется в выражении только один раз.

Вывод

Для каждого тестового случая напишите каждое выражение так, как оно появляется во входных данных (точно), затем напишите значение полного выражения. После этого на отдельных строках напишите значение каждой переменной после оценки выражения (напишите их в отсортированном порядке имен переменных). Пишите только значения переменных, которые используются в выражениях.

Пример
Ввод
2
a+b
c+f--+--a
Вывод
Expression: a+b
value = 3
a = 1
b = 2
Expression: c+f--+--a
value = 9
a = 0
c = 3
f = 5