luogu#P2186. 小 Z 的栈函数

小 Z 的栈函数

题目描述

小 Z 最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下 11 个操作:

  • NUM x\texttt{NUM} ~x:栈顶放入 xx
  • POP\texttt{POP}:抛弃栈顶元素。
  • INV\texttt{INV}:将栈顶元素取出,然后放入它的相反数。
  • DUP\texttt{DUP}:再放入一个和栈顶元素相同的数。
  • SWP\texttt{SWP}:交换栈顶的两个元素。
  • ADD\texttt{ADD}:取出栈顶的两个元素,两元素相加,所得结果放入栈内。
  • SUB\texttt{SUB}:取出栈顶的两个元素,第二个元素减去第一个元素,所得结果放入栈内。
  • MUL\texttt{MUL}:取出栈顶的两个元素,两元素相乘,所得结果放入栈内。
  • DIV\texttt{DIV}:取出栈顶的两个元素,第二个元素整除以第一个元素,所得结果放入栈内。
  • MOD\texttt{MOD}:取出栈顶的两个元素,第二个元素取模以第一个元素,所得结果放入栈内。
  • END\texttt{END}:结束这个程序。

然后,小 Z 用上面的 11 种操作写了一个一元函数 f(x)f(x)xx 就是放入栈里面第一个初始元素。然后经过这个函数的一系列操作,当函数结束的时候,正常情况下,栈里面会有唯一的一个元素。剩下的这个元素就作为函数 f(x)f(x) 的返回值。

小 Z 有 nn 个询问,询问每个值 xx 经过上述函数所映射出的 f(x)f(x) 是多少。但是这个由于机器太老了,跑起东西来太慢了,小 Z 又是一个急性子,所以请你们写一个程序,来帮助小 Z 计算他查询的 f(x)f(x)

还有,由于这台机器太破了,所以如果运算过程中有数字的绝对值大于 10000000001000000000,机器将产生故障。

输入格式

输入首先有若干行,仅包含上述 11 个操作,用来描述函数 f(x)f(x) 的操作,函数的结束保证以 END\texttt{END} 结尾.

接下来有一个整数,表示询问的个数 nn

接下来 nn 行,每行一个整数 xx,表示询问 f(x)f(x) 的值。

输入数据不保证合法

输出格式

输出 nn 行,每行表示一个询问的结果。按如下规则输出:

  • 如果最后栈内不是一个元素,输出 ERROR
  • 如果运算过程中有数字的绝对值大于 10000000001000000000,输出 ERROR
  • 如果输入数据不合法,导致中途退出,输出 ERROR
  • 否则输出对应的 f(x)f(x)
NUM 600000000
ADD
END
3
0
600000000
1

600000000
ERROR
600000001

提示

数据规模与约定

对于全部测试点,保证函数的操作步数不超过 200020001n20001 \leq n \leq 2000x109|x| \leq 10^{9}