土豆田

题目背景

大宁在他家门口种了一大片土豆田,划分为 $n \times m$ 的地块。 大宁准备搭建学校的 OJ,为了测试土豆田的性能,大宁找到了你,为他的土豆编写代码。

题目描述

大宁的土豆田是以地块为单位的,每个地块里的所有土豆的集合称为一个处理单元,可以储存两个值:key(键值)和 tmp(缓存值),均为 $32$ 位带符号整数,每个单元。可以执行若干命令。大宁会骑着自行车轮流给每个处理单元供电,顺序如图,展示的是一个被分割为 $4\times 4$ 处理单元的土豆田: ![](https://cdn.luogu.com.cn/upload/pic/12313.png) 单元的编号就是供电的顺序,每次按编号顺序从 $1$ 号到 $n\times m$ 号遍历一遍。 每一次完整的遍历称为一个周期。 只有一块地上的土豆得到供电,它们才会工作,执行命令,所有命令执行完之后大宁会停止供电。 对于每一个处理单元,命令格式如下: 1. `in` 读取一个数,存放到该单元的 $\text{tmp}$ 中。(如果 $\text{tmp}$ 中有数,那么覆盖掉,以下的所有存放均如此) 1. `out` 输出当前处理单元的 $\text{key}$ 值。 1. `swap` 交换该单元的 $\text{key}$ 和 $\text{tmp}$。 1. `add X` 给 $\text{key}$ 值加上 $X$,$X$ 只能是一个常数或者 $\text{tmp}$,下同。 1. `set X` 把 $\text{key}$ 值修改为 $X$。 1. `opp` 对 $\text{key}$ 值取相反数。 1. `rev` 对 $\text{key}$ 值按位取反。 1. `L/R X` 左/右移 $\text{key}$ 值 $X$ 位。 1. `get u/d/l/r` 将当前单元上(u)/下(d)/左(l)/右(r)面的单元的 $\text{key}$ 值并把它复制到本单元的 $\text{tmp}$,位置规则按照前面的图片所示。 1. `or/and/or X` 对 $\text{key}$ 值按位或/与/异或 $X$。 1. `wait` 在本次供电的时间中等待,即什么事情也不做。 1. `if X` 如果此时 X(只能是 $\text{key}$ 或者 $\text{tmp}$ )不等于 $0$ 则在下一次供电执行该语句的下一条语句,否则跳过下一条语句,执行下下条(如果存在的话)。 1. `goto Y` 下一次供电从第 $Y$ 号命令开始执行,$Y$ 只能是常数。 1. `end` 强制结束所有的处理单元的命令,无视所有尚未执行的命令。 我们提供了 check.exe,把你的土豆程序 potato.out 和你想测试的输入数据 potato.in 放到与 check.exe 同文件夹下,运行之后可以在 report.txt 中查看你的程序的详细运行情况。 我们还提供了另一个样例土豆程序 example2.out,使用 $2\times2$ 处理单元的土豆程序,内容为计算一个整数 $a$ 的 $10$ 倍,可以自行解读(该样例并非该计算的最优解,只是为了展示命令)。 下面展示了一个 $1 \times 3$ 的处理单元,所有单元不一定需要全部使用。 ![](https://cdn.luogu.com.cn/upload/pic/12314.png) 你有以下任务需要用编写土豆程序完成: |编号|输入|输出|数据范围|处理单元大小限制|分数|补充说明| | :----------: | :----------: | :----------:| :----------:| :----------:|:----------: | :----------: | |$1$|$a\text{,}b$|$b-a$|$\lvert a\rvert \text{,}\lvert b\rvert \le10^9 $|$1 \times 3$|$7$|无| |$2$|$a$|$233\times a$|$1 \le\lvert a\rvert \le10^7 $|$2 \times 2$|$9$|无| |$3$|$a$|$\lvert a \rvert$|$1 \le\lvert a\rvert \le10^9 $|$2 \times 2$|$12$|求 $a$ 的绝对值| |$4$|$128$ 个整数 $a_i$|$\sum^{128}_{i=1}a_i$|$1 \le\lvert a\rvert \le2 \times 10^6 $|$4 \times 2$|$12$|无| |$5$|$a\text{,}b$|$\lfloor \frac{a+b}{2}\rfloor$|$\lvert a\rvert \text{,}\lvert b\rvert \le2.1\times10^9 $|$2 \times 2$|$13$|无| |$6$|$a$|$\operatorname{popcount}(a)$|$\lvert a\rvert\le10^9 $|$2 \times 2$|$13$|$\operatorname{popcount}(a)$表示 $a$ 在二进制表示下 $1$ 的个数| |$7$|$a\text{,}b$|$\max {(a,b)}$|$\lvert a\rvert \text{,}\lvert b\rvert \le10^9 $|$2 \times 2$|$14$|无| |$8$|$n$|$f(n)$|$1 \le n \le 42$|$3 \times 3$|$20$|$f(n)=\begin{cases}1 & n<2\\f(n-1)+f(n-2) & n\ge 2\end{cases}$|

输入输出格式

输入格式


本题为提交答案题。

输出格式


第一行为 $n$ 和 $m$,表示你用了 $n$ 行 $m$ 列。 接下来$n\times m$个部分,第 $i$ 个部分的第一行 $t_i$ 表示在第 $i$ 个处理单元中命令的数量(可以为 $0$),接下来 $t_i$ 行每行描述一个命令,见上文所述。

输入输出样例

输入样例 #1

例:一个使用1*1的土豆田处理单元(下称处理单元)的A+B problem
输入两个整数a,b,|a|,|b|<=10^9
输出a+b

1 1
5
in
swap
in
add tmp
out

输出样例 #1

解释:
第一行的1 1表示用的处理单元为1*1
第二行表示第一个处理单元有5条指令。
第三行的命令在第一个周期执行,读入了一个数(假定为a) ,此时该单元的状态为key=0,tmp=a
第四行在第二个周期执行,交换了key和tmp,状态为key=a,tmp=0
第五行在第三个周期执行,读入了另一个数b,状态为key=a,tmp=b
第六行在第四个周期执行,给key加上tmp,状态为key=a+b,tmp=b
第七行在第五个周期执行,输出该单元的key,即输出了a+b

说明

#### 样例#1解释 这个样例实现了 A+B problem。 第一行的 `1 1` 表示用的处理单元为 $1\times1$。 第二行表示第一个处理单元有 $5$ 条指令。 第三行的命令在第一个周期执行,读入了一个数(假定为 $a$) ,此时该单元的状态为 $\text{key}= 0 \text{,}\text{tmp}= a$。 第四行在第二个周期执行,交换了 $\text{key}$ 和 $\text{tmp}$,状态为 $\text{key}= a \text{,}\text{tmp}= 0$。 第五行在第三个周期执行,读入了另一个数 $b$,状态为 $\text{key}= a \text{,}\text{tmp}= b$。 第六行在第四个周期执行,给 $\text{key}$ 加上 $\text{tmp}$,状态为 $\text{key}= a+b \text{,}\text{tmp}= b$。 第七行在第五个周期执行,输出该单元的 $\text{key}$,即输出了 $a+b$。 如果你的程序在 $2000$ 个周期内没有运行完毕,或者有语法错误,或者超过处理单元尺寸限制,得 $0$ 分。 如果你的第 $i$ 个任务的程序能得出正确的结果,并且和标准答案运行所需的周期数量相同或比其更少,得会得到该测试点的满分,否则设你的程序运行了 $a$ 个周期,标准答案运行了 $s$ 个周期,你的分数为 $\lfloor\text{该测试点分数}\times(\frac{s}{a})\times0.8 \rfloor$(注意,部分正确显示WA,但是仍然有分数)。 ```cpp P1=7 P2=9 P3=12 P4=12 P5=13 P6=13 P7=14 P8=20 ``` PS:如果你构造了什么好玩的土豆程序(可以和本题目中的任务无关),请到答疑博客下或者私信告诉我,会酌情给予奖励。 Check 下载见附件。 example2.out: ``` 2 2 8 in add tmp L 3 get r add tmp get d add tmp out 3 wait get l add tmp 3 wait get u add tmp ```