U283455 [CSP201912-3] 化学方程式配平

题目背景

来自 CCF-CSP 第 18 次认证[第 3 题](https://sim.csp.thusaac.com/contest/18/problem/2)。

题目描述

化学方程式,也称为化学反应方程式,是用化学式表示化学反应的式子。 给出一组化学方程式,请你编写程序判断每个方程式是否配平(也就是方程式中等号左右两边的元素种类和对应的原子个数是否相同)。 本题给出的化学方程式由大小写字母、数字和符号(包括等号 `=`、加号 `+`、左圆括号 `(` 和右圆括号 `)`)组成,不会出现其他字符(包括空白字符,如空格、制表符等)。 化学方程式的格式与化学课本中的形式基本相同(化学式中表示元素原子个数的下标用正常文本,如 $\text{H}_2\text{O}$ 写成 `H2O`),用自然语言描述如下: - **化学方程式**由左右两个**表达式**组成,中间用一个**等号** `=` 连接,如 `2H2+02=2H20`; - **表达式**由若干部分组成,每部分由**系数**和**化学式**构成,部分之间用**加号** `+` 连接,如 `2H2+02`、`2H20`; - **系数**是**整数**或**空串**,如为**空串**表示**系数**为 $1$ ; - **整数**由一个或多个**数字**构成; - **化学式**由若干部分组成,每部分由**项**和**系数**构成,部分之间直接连接,如 `H20`、`CO2`、`Ca(OH)2`、`Ba3(PO4)2`; - **项**是**元素**或用**左右圆括号**括起来的**化学式**,如 `H`、`Ca`、`(OH)`、`(PO4)`; - **元素**可以是一个**大写字母**,也可以是一个**大写字母**跟着一个**小写字母**,如 `H`、`O`、`Ca`。 用巴科斯范式(Backus-Naur form,BNF)给出的形式化定义如下: ```plain ::= "=" ::= | "+" ::= | "" ::= | ::= "0" | "1" | ... | "9" ::= | ::= | "(" ")" ::= | ::= "A" | "B" | ... | "Z" ::= "a" | "b" | ... | "z" ```

输入格式

从标准输入读入数据。 输入的第一行包含一个正整数 $n$,表示输入的化学方程式个数。 接下来 $n$ 行,每行是一个符合定义的化学方程式。

输出格式

输出到标准输出。 输出共 $n$ 行,每行是一个大写字母 `Y` 或 `N` ,回答输入中相应的化学方程式是否配平。

说明/提示

$1≤n≤10$, 输入的化学方程式都是符合题目中给出的定义的,且长度不超过 $1000$。 系数不会有前导零,也不会有为零的系数。 化学方程式的任何一边,其中任何一种元素的原子总个数都不超过 $10^9$ 。