이 문제에서는 간단한 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이고, 계산이 끝난 뒤 b 와 c 는 각각 1과 2가 된다.++ 와 -- 를 좀 더 절차적으로 설명하면 다음과 같다(간결함을 위해 ++ 만 설명한다).
++ 가 붙은 각 변수를 찾는다. 그 변수의 값을 1 증가시키는 대입문을 만들고, 표현식에서 변수 앞의 ++ 를 제거한다.++ 가 붙은 각 변수를 찾는다. 그 변수의 값을 1 증가시키는 대입문을 만들고, 표현식에서 변수 뒤의 ++ 를 제거한다.++ 가 남아 있지 않다. 남은 표현식을 계산하는 문장을 만든다. 이 문장은 1단계에서 만든 문장들 뒤, 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)로 출력한다.