Liyuu的狂热粉丝的计算机
题号:NC231653
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Liyuu_的狂热粉丝设计了一台拥有两个输入设备(指令输入器和数据输入器)、一个输出设备、三种存储器、中央处理器(CPU)和一套可能是图灵完备的指令系统的计算机(以下简称计算机)。

简单地说,计算机的存储器分为指令和数据两类,其中指令内部存储器存储待执行的N条指令并且能记录将要执行到的是第几条指令。而数据存储器可存储32位有符号整数(int类型),其拥有个存储单元,其中前16个单元(索引从0到15)为寄存器,接下来的M个单元为数据内部存储器(以下简称数据内存),所有数据存储器单元的初始值均为0。所以存储器共有指令内部存储器、寄存器和数据内存三类。寄存器和数据内存是有区别的。特别的,寄存器的0号单元(数组的第0个位置)不能写入,其值恒为0.

在工作时,会先从读入N条指令,将它们按0到N-1编号,然后把将要执行到的指令记为0并开始执行。执行过程中,计算机每次读取将要执行到的指令,接着把将要执行到的指令加一,然后执行读取到的指令的功能。实际上计算机会在读取到所有指令后增加一条停机指令,其编号为N,当执行到它时,计算机会正常关机。计算机的指令的固定格式为`指令 整数 整数 整数`,其中的"整数"是该条指令的参数,不是所有参数都会被使用到

指令共有如下10种:

以下为一段指令使用示例:
in 65 56 45
mov 15 1 1
in 45 14 475
cmp 1 15 2
jz 0 4 4

这段指令会被依次编号为0,1,2,3,4,并且其结尾会有一条编号为5的停机指令。
0. 计算机先执行第0条指令,其结果是15号寄存器中存储了从数据输入器中读到的一个整数。
1. 计算机接着执行第1条指令,其结果是15号寄存器中的整数被存到了1号寄存器中。
2. 计算机接着执行第2条指令,其结果是15号寄存器中存储了从数据输入器中读到的一个整数。
3. 计算机接着执行第3条指令,当15号寄存器中的整数与1号寄存器中的整数相同时,14号寄存器会被改为1;当15号寄存器中的整数大于1号寄存器中的整数相同时,14号寄存器会被改为2;
4. 计算机接着执行第4条指令,如果14号寄存器的值不为1时,计算机会把将要执行到的指令记为0,否则不做任何事。所以接下来计算机可能会回到第0条指令开始执行,也可能按顺序执行第5条指令。
5. 计算机接着执行第5条指令,其结果是计算机正常关机。

执行这段指令时计算机会不停地读入两个整数,判断它们是否相等,如果不等,则停止运行。

执行一条指令前,计算机会判断指令参数是否合法,任何**非法**的指令均会导致计算机立即开始执行预定的异常退出模块,计算机会在输出设备上单独打印一行显示"error",然后终止运行。

为了测试已经制作完成的初号机,Liyuu_的狂热粉丝向你寻求帮助。

他会给你这个初号机的数据内存大小和一段他的测试程序,并给你一段将送入数据输入器的数据,而你需要给出正确的输出。

(两个out之间需要空格)

输入描述:

输入的第一行包括两个整数表示有有N条指令和M个数据内存单元
接下来为N行,每一行一段指令,表示了将要执行的程序,保证所有指令均符合格式。
接着一行给出若干(可能没有)整数,表示Liyuu的狂热粉丝给机器的输入,初号机可能不会读取到所有输入,但保证初号机总是能读到整数。

输出描述:

输出一行整数(可能没有),表示Liyuu的狂热粉丝的机器的输出。
如果机器运行遇到了非法情况,则换行输出"error"。
示例1

输入

复制
5 5
in 1 2 3
add 1 0 15
in 1 2 3
add 15 1 15
out 12 31 41
1 1

输出

复制
2
示例2

输入

复制
6 5
in 1 2 3
add 1 0 15
in 312 45 1
add 15 1 15
add 16 1 15
out 15 145 4
1 1

输出

复制
error

说明

第一行是有一行空行,第二行为error,样例可能显示不正确。
示例3

输入

复制
7 10
in 1 2 3
mov 15 1 2
in 1 2 3
cmp 1 15 1
mov 14 15 1
out 1 2 3
jz 0 2 3
14 14 14 14 15 16

输出

复制
1 1 0