许多密码可以通过使用各种机器和自动机更快地计算。在本题中,我们将关注一种特殊类型的机器,称为栈机(stack machine)。它的名字来源于该机器使用著名的数据结构——栈进行操作。后存入的值在栈顶,较旧的值在栈底。机器指令通常仅操作栈顶。
我们的栈机相对简单:它仅处理整数,除了栈之外没有其他存储空间(没有寄存器等),也没有特殊的输入或输出设备。指令集如下:
NUM X:其中 $X$ 是一个非负整数,$0 \le X \le 10^9$。NUM指令将数字 $X$ 压入栈顶。这是唯一带参数的指令。POP:移除栈顶的数字。INV:改变栈顶数字的符号($42 \to -42$)。DUP:复制栈顶的数字并压入栈。SWP:交换栈顶两个数字的位置。ADD:将栈顶的两个数字相加。SUB:用“第二个数字”(即栈顶之下的那个数字)减去栈顶数字。MUL:将栈顶的两个数字相乘。DIV:将栈顶的两个数字进行整除。栈顶数字作为除数,其下方的数字作为被除数。商将作为结果存入。MOD:取模操作。操作数与整除相同,但余数作为结果存入。
所有双目运算符都将栈顶数字视为“右”操作数,将第二个数字(下方的数字)视为“左”操作数。所有这些操作都会从栈中移除这两个操作数,并将结果放回栈顶以代替原来的两个数。
如果栈中的数字不足以执行某条指令(需要一个或两个),该指令的执行将导致程序失败。如果除数变为零(对于 DIV 或 MOD),或者任何操作的结果绝对值超过 $10^9$,也会发生失败。这意味着机器仅在 $[-1\,000\,000\,000, 1\,000\,000\,000]$(含两端)范围内的数字上进行操作。
为了避免在处理负除数和余数时产生歧义:如果除法操作的某个操作数为负数,结果的绝对值应始终使用操作数的绝对值来计算,其符号确定如下:当且仅当恰好有一个操作数为负数时,商为负数。余数的符号与被除数相同。因此,$13 \text{ div } -4 = -3$,$-13 \text{ mod } 4 = -1$,$-13 \text{ mod } -4 = -1$ 等。
如果由于任何原因发生失败,机器将停止当前程序的执行,并且在该程序运行中不再评估其他指令。
输入格式
输入包含多个机器的描述。每个机器由两部分描述:程序和输入部分。
程序由一系列指令给出,每行一条。每条指令由三个大写字母组成,且不得有任何其他字符。唯一的例外是 NUM 指令,它在三个字母后恰好有一个空格,后跟一个介于 $0$ 和 $10^9$ 之间的非负整数。唯一允许的指令是上面定义的那些。每个程序都以包含单词 END(且没有其他内容)的一行结束。
输入部分以一个整数 $N$($0 \le N \le 10\,000$)开始,表示程序执行的次数。接下来的 $N$ 行每行包含一个数字,指定输入值 $V_i$($0 \le V_i \le 10^9$)。程序应针对这些值中的每一个独立执行一次,每次执行开始时,栈中包含一个数字——输入值 $V_i$。
每个机器描述的末尾都有一个空行。最后一个机器后面跟着一行,包含单词 QUIT。任何程序包含的指令都不会超过 $100\,000$ 条,且在执行过程中的任何时刻,任何程序都不需要栈中超过 $1\,000$ 个数字。
输出格式
对于每个输入值,打印一行,其中包含对应执行的输出值,即程序在初始栈仅包含输入数字的情况下执行后,栈中留下的那一个数字。
如果在执行过程中发生程序失败,或者在运行结束时栈的大小不正确(为空或多于一个数字),则打印单词 ERROR。
在每个机器(包括最后一个)之后打印一个空行。
样例
输入样例 1
DUP MUL NUM 2 ADD END 3 1 10 50 NUM 1 NUM 1 ADD END 2 42 43 NUM 600000000 ADD END 3 0 600000000 1 QUIT
输出样例 1
3 102 2502 ERROR ERROR 600000000 ERROR 600000001