#CCF2031. 等价表达式

等价表达式

题目描述

明明进了中学之后,学到了代数表达式。

有一天,他碰到一个很麻烦的选择题。

这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和题干中的表达式等价的。

这个题目手算很麻烦,因为明明对计算机编程很感兴趣,所以他想是不是可以用计算机来解决这个问题。

假设你是明明,能完成这个任务吗?

这个选择题中的每个表达式都满足下面的性质:

1.表达式只可能包含一个变量 aa

2.表达式中出现的数都是正整数,而且都小于 10000。

3.表达式中可以包括四种运算 +(加),-(减),*(乘),^(乘幂),以及小括号 ()。小括号的优先级最高,其次是 ^,然后是*,最后是 +-+- 的优先级是相同的。相同优先级的运算从左到右进行。(注意:运算符 +-*^ 以及小括号 () 都是英文字符)

4.幂指数只可能是 1 到 10 之间的正整数(包括 1 和 10)。

5.表达式内部,头部或者尾部都可能有一些多余的空格。

6.数据中所有的表达式一定是合法的,例如左右括号一定是相互匹配的。(NOIP原始数据有误,存在左右括号不匹配的情况,我们对错误数据进行了修正,可不必考虑括号不匹配情况)

下面是一些合理的表达式的例子:

((a^1) ^ 2)^3a*a+a-a,((a+a))9999+(a-a)*a1 + (a -1)^31^10^9……

输入

输入文件的第一行给出的是题干中的表达式。

第二行是一个整数 nn,表示选项的个数。

后面 nn 行,每行包括一个选项中的表达式,这 nn 个选项的标号分别是 A,B,C,D……

输入中的表达式的长度都不超过 50 个字符,而且保证选项中总有表达式和题干中的表达式是等价的。

输出

输出文件包括一行,这一行包括一系列选项的标号,表示哪些选项是和题干中的表达式等价的。

选项的标号按照字母顺序排列,而且之间没有空格。

( a + 1) ^2
3
(a-1)^2+4*a
a + 1+ a
a^2 + 2 * a * 1 + 1^2 + 10 -10 +a -a
AC

提示

2n262≤n≤26