분자식
시간 제한3초메모리 제한128 MB
괄호와 반복 횟수가 있는 분자식을 파싱해 원자량 표로 분자 무게를 계산하고, 알 수 없는 원소가 있으면 UNKNOWN을 출력합니다.
문제
가상 화학에서 분자식으로 표현된 분자의 무게를 계산하는 프로그램을 작성하시오. 실제 화학처럼 각 분자식은 하나 이상의 원자로 이루어진 분자를 나타내지만, 화학적으로 실제 존재할 필요는 없다.
- 하나의 원자는 원자 기호로 나타낸다. 원자 기호는 대문자 하나이거나, 대문자 뒤에 소문자 하나가 붙은 것이다. 예를 들어
H와He는 원자 기호이다. - 분자식은 원자 기호를 비어 있지 않게 나열한 것이다. 예를 들어
HHHeHHHe는H원자 네 개와He원자 두 개로 이루어진 분자를 나타낸다. - 같은 부분식 가 연속으로 번 반복될 때(은 이상 이하의 정수), 이를
(X)n으로 줄여 쓸 수 있다. 가 원자 기호 하나이면 괄호를 생략할 수 있다. 예를 들어HHHeHHHe는H2HeH2He,(HHHe)2,(H2He)2,((H)2He)2로도 쓸 수 있다.
모든 분자식의 집합은 하나의 형식 언어로 볼 수 있다. 위의 설명을 요약하면, 분자식의 문법은 다음과 같이 정의된다.
Molecule → Atom | Atom Number | ( Molecule ) Number | Molecule Molecule
Atom → CapitalLetter | CapitalLetter SmallLetter
Number → 2 | 3 | 4 | · · · | 97 | 98 | 99
CapitalLetter → A | B | C | · · · | X | Y | Z
SmallLetter → a | b | c | · · · | x | y | z
각 원자는 고유한 원자량을 가진다. 분자량은 구성 원자들의 원자량을 모두 더한 값이다. 예를 들어 H와 He의 원자량이 각각 , 이면, (H2He)2로 표현되는 분자의 무게는 이다.
입력
입력은 두 부분으로 이루어진다.
첫 번째 부분은 원자표이다. 여러 줄로 이루어지며, 각 줄에는 원자 기호, 하나 이상의 공백, 그리고 그 원자량(양의 정수, 이하)이 있다. 같은 원자 기호가 두 줄에 나오지는 않는다. 이 부분은 END_OF_FIRST_PART만 있는 줄로 끝난다.
두 번째 부분은 여러 줄로 이루어진다. 각 줄은 공백이 없는 길이 이하의 분자식이다. 한 분자는 최대 개의 원자를 포함한다. 분자식에 나오는 원자 기호 중 일부는 원자표에 없을 수도 있다. 이 부분은 0 하나만 있는 줄로 끝난다.
출력
두 번째 부분의 각 분자식에 대해 한 줄씩 출력한다. 분자식의 모든 원자 기호가 원자표에 있으면 그 분자량을 정수로 출력하고, 그렇지 않으면 UNKNOWN을 출력한다. 다른 문자는 출력하지 않는다.