#P2045. Molecular Formula

Molecular Formula

本题没有可用的提交语言。

描述

在这个问题中,你的任务是编写一个计算机程序,用于操作虚拟化学中的分子式。与真实化学一样,每个分子式表示由一个或多个原子组成的分子。然而,它可能没有化学现实性。

以下是原子符号和分子式的定义。

分子中的原子用原子符号表示,原子符号可以是一个大写字母,或者是一个大写字母后面跟一个小写字母。例如,H 和 He 都是原子符号。

分子式是由一个或多个原子符号组成的非空序列。例如,HHHeHHHe 是一个分子式,表示一个由四个 H 和两个 He 组成的分子。

为了方便起见,相同的子公式 X...X(其中 n 是 2 到 99 之间的整数)可以用 (X)n 的形式缩写。如果 X 是原子符号,可以省略括号。例如,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 的原子的原子量分别为 1 和 4,则由 (H2He)2 表示的分子的总重量为 12。

输入

输入包含两部分。第一部分是原子表,由多行组成,每行包含一个原子符号、一个或多个空格和它的原子量(一个不超过1000的正整数)。没有两行包含相同的原子符号。

第一部分以一行仅包含字符串 END_OF_FIRST_PART 结束。

输入的第二部分是一个序列,每行是一个分子式,不超过80个字符,且不包含空格。一个分子最多包含10^5个原子。分子式中的一些原子符号可能不出现在原子表中。

该序列后面跟着一行,包含一个零,表示输入结束。

输出

输出是一个序列,每行对应输入的第二部分的一行。每行包含一个整数,如果给定的分子式中的所有原子符号都出现在原子表中,则为该分子式的分子量;否则为 UNKNOWN。不允许出现额外的字符。

输入数据 1

H 1  
He 4  
C 12  
O 16  
F 19  
Ne 20  
Cu 64  
Cc 333  
END_OF_FIRST_PART  
H2C  
(MgF)2As  
Cu(OH)2  
H((CO)2F)99  
0

输出数据 1

14  
UNKNOWN  
98  
7426

来源

2003年日本,会津