간단한 C 표현식 계산하기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

이 문제에서는 간단한 C 표현식들을 차례로 계산해야 하지만, 문제를 풀기 위해 C 언어를 알 필요는 없다. 각 표현식은 한 줄에 하나씩 주어지며 길이는 80자를 넘지 않는다. 표현식에는 단순한 정수 변수와 제한된 연산자만 등장하고, 상수는 나타나지 않는다.

표현식에 등장할 수 있는 변수는 a부터 z까지(소문자)의 26개이다. 각 표현식의 계산을 시작하는 시점에 이 26개 변수는 각각 정수 1부터 26까지의 값을 가진다. 즉 a = 1, b = 2, ..., z = 26이다. 한 표현식 안에서 각 변수는 많아야 한 번만 등장하며, 전혀 사용되지 않는 변수도 많을 수 있다.

표현식에 등장하는 연산자는 다음과 같다.

  • 이항 연산자 +- 는 일반적인 덧셈, 뺄셈을 의미한다. 예를 들어 a + c - d + b 의 값은 1 + 3 - 4 + 2 = 2 이다.
  • 단항 연산자 ++-- 는 변수의 앞 또는 뒤에 올 수 있다.
    • ++ 가 변수 앞에 오면(전위), 전체 표현식의 값을 계산할 때 그 변수의 값을 사용하기 전에 변수의 값을 1 증가시킨다. 따라서 ++c - b 의 값은 2이며, 계산 전에 c 가 4로 증가한다.
    • ++ 가 변수 뒤에 오면(후위), 전체 표현식의 값을 계산하는 데 변수의 값을 사용한 후에 변수의 값을 1 증가시킨다. 따라서 c++ - b 의 값은 1이지만, 계산이 끝난 뒤 c 의 값은 4가 된다.
    • -- 도 같은 방식으로 변수의 앞 또는 뒤에 놓여 변수의 값을 1 감소시킨다. 따라서 --c + b-- 의 값은 4이고, 계산이 끝난 뒤 bc 는 각각 1과 2가 된다.

++-- 를 좀 더 절차적으로 설명하면 다음과 같다(간결함을 위해 ++ 만 설명한다).

  1. 앞에 ++ 가 붙은 각 변수를 찾는다. 그 변수의 값을 1 증가시키는 대입문을 만들고, 표현식에서 변수 앞의 ++ 를 제거한다.
  2. 같은 방식으로 뒤에 ++ 가 붙은 각 변수를 찾는다. 그 변수의 값을 1 증가시키는 대입문을 만들고, 표현식에서 변수 뒤의 ++ 를 제거한다.
  3. 이제 표현식에는 어떤 변수에도 앞뒤의 ++ 가 남아 있지 않다. 남은 표현식을 계산하는 문장을 만든다. 이 문장은 1단계에서 만든 문장들 뒤, 2단계에서 만든 문장들 앞에 놓인다.
  4. 1단계의 문장들, 그다음 3단계의 문장, 마지막으로 2단계의 문장을 이 순서대로 실행한다.

이 방식에 따르면 ++a + b++ 를 계산하는 것은 다음과 같다.

  • a = a + 1 (1단계)
  • expression = a + b (3단계)
  • b = b + 1 (2단계)

여기서 expression 이 전체 표현식의 값을 받는다.

입력

표현식을 한 줄에 하나씩, 완전히 빈 줄(또는 공백뿐인 줄)이 나올 때까지 읽는다.

표현식을 계산할 때 공백은 무시한다. a+++b 처럼 모호한 표현식(a++ + b 로도, a + ++b 로도 해석될 수 있다)은 입력에 나타나지 않는다. 또한 ++-- 연산자가 한 변수의 앞과 뒤에 동시에 붙는 일은 없으므로, ++a++ 와 같은 표현식도 입력에 나타나지 않는다.

출력

각 표현식에 대해, 먼저 읽은 그대로의 표현식을 Expression: 뒤에 이어 출력한다. 다음 줄에 전체 표현식의 값을 출력하고, 이어서 표현식에서 사용된 각 변수의 계산 후 값을 한 줄에 하나씩 출력한다. 사용되지 않은 변수는 출력하지 않는다.

값 줄과 각 변수 줄은 공백 4칸으로 들여쓴다. 값 줄의 형식은 value = <값> 이고, 변수 줄의 형식은 <변수> = <값> 이다. 사용된 변수들은 알파벳 순서(a부터 z)로 출력한다.