T289550 摆烂验题人CPX

题目背景

CPX同学,作为某CQ御用的验题人,每天都在受到某CQ所出题目的无情折磨,今天某CQ又出了一道题,CPX同学在马原课上盯了这道题两节课,终于从字缝里看出字来——整道题满满的都写着“矩阵变换”,某CQ在这道题中变着法子让做题人在这道题目里面辗转反侧,对某一个给定矩阵中的子矩阵进行各种各样的变换。 由于盯了两个多小时的屏幕,CPX同学在做这道题前已经感到老眼昏花,好像身体被掏空了,实在受不了某CQ带给他的无尽折磨,CPX同学这次决定摆烂一次,不给某CQ验题了。 一道题要是连正确性都没法保证,那还叫啥题目啊? 于是,检验这道题的光荣任务,就交到了你的手中!

题目描述

某CQ现在给了你一个N x M的矩阵,他现在想要进行Q次操作,每次操作某CQ会指定一个子矩阵和一种操作,他想让你对这个矩阵进行他指定的某种变换方式,具体的操作方式将会放在题目描述的尾部。 当Q次操作进行完之后,某CQ想要让你告诉他,经过这么多次变化的矩阵,最后长成什么样了? 操作类型1: 某CQ想要让你将他指定的子矩阵顺时针旋转90度。 操作类型2: 某CQ想要让你将他指定的子矩阵逆时针旋转90度。 操作类型3: 某CQ给定一个值k,需要你将这个子矩阵当中的所有元素加上k 操作类型4: 某CQ给定一个整数k,需要你将这个子矩阵当中的所有元素都乘上k 操作类型5: 某CQ需要你将这个矩阵的所有行倒过来(第一行变成第n行,第二行变成第n - 1行,以此类推) 操作类型6: 某CQ需要你将这个矩阵的所有列倒过来(与操作类型5同理) 操作类型7: 某CQ指定两个不相交的相同大小的子矩阵,将这两个子矩阵交换位置 其它操作类型: 操作类型编号可能为除1到7以外任何一个值,某CQ想让你歇一歇,这时不需要对矩阵进行任何变换。 另外,老老实实对每种操作写函数,某CQ不希望你将所有操作都塞在main函数里面。

输入格式

第一行三个整数N,M,Q,为题中表示的含义 接下来N行,每行M个整数,为给定的矩阵 接下来Q行,每行若干个整数,第一个整数表示操作类型。 如果操作类型为1或2或5或6,某CQ指定一个子矩阵的左上角坐标和右下角坐标,共4个正整数 如果操作类型为3或4,某CQ指定一个子矩阵的左上角坐标和右下角坐标以及k,共4个正整数和一个整数 如果操作类型为7,某CQ分别指定第一个子矩阵的左上角坐标和右下角坐标,以及第二个矩阵的左上角坐标和右下角坐标,共8个正整数。 如果操作类型为其他值,后面不输入任何数字。

输出格式

共N行,每行M个整数,为最终结果的矩阵。

说明/提示

样例解释 某CQ让你将整个矩阵顺时针旋转90度,再逆时针旋转90度,实际上并没有变化。 数据范围及约定 对于20%的数据,满足1