eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Вычисление выражений

Вычисление выражений

Это задача о вычислении выражений, записанных в стиле языка программирования С. Выражения могут содержать только простые целочисленные переменные и ограниченное количество операторов; константы в выражениях отсутствуют. В программе используются \textbf{26} переменных, имена которых задаются буквами нижнего регистра от \textbf{a} до \textbf{z}. Перед началом вычислений начальные значения переменных следующие: \textbf{a = 1},\textbf{b = 2}, ..., \textbf{z = 26}. Допустимыми операциями являются сложение и вычитание (бинарные \textbf{+} и \textbf{-}) со стандартным семантическим смыслом. Так, значением выражения \textbf{a + c - d + b} будет число \textbf{2 (1 + 3 - 4 + 2)}. Входные выражения могут также содержать унарные операции \textbf{++} и \textbf{---}, которые могут находиться как перед, так и после переменных. Если оператор \textbf{++} стоит перед переменной, то значение переменной увеличивается на единицу перед ее использованием в вычислении всего выражения. Значением выражения \textbf{++ c - b} будет \textbf{2}. Если оператор \textbf{++} следует после переменной, то увеличение значения переменной на один происходит после ее использования в выражении. Значение \textbf{c ++ - b} равно \textbf{1}, значение \textbf{c} увеличивается после вычисления всего выражения, оно становится равным \textbf{4}. Оператор \textbf{--} ведет себя таким же образом, только он уменьшает на единицу значение операнда. Если говорить формально, то выражение вычисляется следующим образом: \begin{enumerate} \item Находим все переменные, которым предшествует оператор \textbf{++}. Записываем оператор присваивания, увеличивающий их значения. После чего удаляем \textbf{++} перед переменными во всем выражении. \item Аналогично обрабатываем операторы \textbf{++}, находящиеся после переменных. \item Теперь операторы \textbf{++} отсутствуют в выражении. Вычисляем значение выражения, полученного после шага \textbf{1} и перед выполнением шага \textbf{2}. \item Выполняем предписания, указанные в шаге \textbf{1}, потом в шаге \textbf{3}, а потом в шаге \textbf{2}. \end{enumerate} Таким образом, вычисление \textbf{++ a + b ++} эквивалентно выполнению следующих операций: \textbf{a = a + 1}, \textbf{result = a + b }и \textbf{b = b + 1}. \InputFile Первая строка содержит количество тестов \textbf{t}. Каждая из следующих \textbf{t} строк содержит одно выражение. Пробелы во входных выражениях следует игнорировать. Будьте уверены, что выражения не содержат неоднозначностей (как например \textbf{a+++b}). Операторы \textbf{++} или \textbf{--} не могут одновременно находиться до и после одной переменной (как например \textbf{++a++}). Каждая переменная встречается в выражении только один раз. \OutputFile Для каждого теста выведите выражение в том же виде в котором оно поступает на вход, затем выведите значение всего выражения. Далее выведите значения всех переменных после вычисления выражения (отсортировав при этом имена переменных). Выводить следует значения только тех переменных, которые используются в выражении. Формат вывода приведен в примере.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
2
a+b
c+f--+--a
Выходные данные #1
Expression: a+b
value = 3
a = 1
b = 2
Expression: c+f--+--a
value = 9
a = 0
c = 3
f = 5