R. 矩阵的基本运算

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

实现这样一个程序:

能存储 100000100000 个矩阵,编号为 1,2,,1000001,2,\cdots,100000

每个矩阵的行数和列数都始终不超过 1010,数值都始终能用 int\texttt{int} 存下。

初始时,矩阵都是空的,即 0000 列。

依次执行 mm 条命令,种类和格式如下:

赋值

格式为

SET id r cA11 A12  A1cAr1 Ar2  Arc\begin{aligned} &\texttt{SET }\textit{id}\texttt{ }r\texttt{ }c\\ &A_{11}\texttt{ }A_{12}\texttt{ }\cdots\texttt{ }A_{1c}\\ &\vdots\\ &A_{r1}\texttt{ }A_{r2}\texttt{ }\cdots\texttt{ }A_{rc} \end{aligned}

表示把编号为 id\textit{id} 的矩阵赋值为 rrcc 列的矩阵 AA1r,c101\le r,c\le10)。

复制

格式为

COPY id1 id2\texttt{COPY}\texttt{ }\textit{id}_1\texttt{ }\textit{id}_2

表示把编号为 id1\textit{id}_1 的矩阵复制一份,赋值给编号为 id2\textit{id}_2 的矩阵。

转置

格式为

TRANSPOSE id\texttt{TRANSPOSE }\textit{id}

表示把编号为 id\textit{id} 的矩阵转置。

加法

格式为

ADD id1 id2 id3\texttt{ADD}\texttt{ }\textit{id}_1\texttt{ }\textit{id}_2\texttt{ }\textit{id}_3

表示把编号为 id1\textit{id}_1 的矩阵与编号为 id2\textit{id}_2 的矩阵相加,结果赋值给编号为 id3\textit{id}_3 的矩阵。

注意:若编号为 id1\textit{id}_1 的矩阵与编号为 id2\textit{id}_2 的矩阵的行数不相等或列数不相等,则不执行该条命令。

乘法

格式为

MUL id1 id2 id3\texttt{MUL}\texttt{ }\textit{id}_1\texttt{ }\textit{id}_2\texttt{ }\textit{id}_3

表示把编号为 id1\textit{id}_1 的矩阵与编号为 id2\textit{id}_2 的矩阵相乘(前乘后),结果赋值给编号为 id3\textit{id}_3 的矩阵。

注意:若编号为 id1\textit{id}_1 的矩阵的列数与编号为 id2\textit{id}_2 的矩阵的行数不相等,则不执行该条命令。

输出

格式为

PRINT id\texttt{PRINT }\textit{id}

表示输出编号为 id\textit{id} 的矩阵。设它是 rrcc 列的矩阵 AA,输出格式为

r cA11 A12  A1cAr1 Ar2  Arc\begin{aligned} &r\texttt{ }c\\ &A_{11}\texttt{ }A_{12}\texttt{ }\cdots\texttt{ }A_{1c}\\ &\vdots\\ &A_{r1}\texttt{ }A_{r2}\texttt{ }\cdots\texttt{ }A_{rc} \end{aligned}

注意:可能仅输出一行两个 00

输入格式

第一行一个整数 mm1m2000001\le m\le200000)。

接下来是 mm 条命令,详见题目描述。

输出格式

对于每条输出命令,作出回答,格式见题目描述。

样例

输入

7
PRINT 9
SET 1 2 2
1 2
3 4
COPY 1 2
ADD 1 2 3
MUL 1 2 4
PRINT 3
PRINT 4

输出

0 0
2 2
2 4
6 8
2 2
7 10
15 22