题目背景
你知道矩阵乘法吗?
对于两个 n×n 的矩阵 A 和 B, 假设 ai,j 表示位于矩阵 A 的第 i 行第 j 列的元素, 同样对于B可以定义类似的 bi,j。 那么如果 C=A×B,则有 ci,j=∑k=1naik×bkj。 其中 ∑ 是序列求和符号,例如 ∑i=1ni 表示 1+2+⋯+n。
题目描述
由于霍比特人的大热, L 的室友 X 最近热衷于研究它们所使用的货币。为了进行研究,X 需要了解一种叫比特矩阵的东西。 虽然比特矩阵也是矩阵,但是它的乘法和一般的矩阵有点不一样。
对于比特矩阵 C=A×B, 意味着 ci,j=Vk=1naik⨁bkj。其中 V 是序列求按位或的符号,例如 Vi=1ni 表示 1∣2∣⋯∣n。 ∣ 就是按位或的意思。 按位或是指从二进制的角度看两个数, 如果第 i 位上两个数至少一个是1的话那结果的第 i 位就是1, 否则第 i 位就是 0。 ⨁ 表示按位异或运算, 即如果两个二进制数的第i位是不相同的话那么结果的第 i 位就是 1,否则就是 0。
举个比特矩阵相乘的例子:
[1365]×[3567]=[3077]现在 X 想要拜托你帮他算 Am,其中 A 是一个 n×n 的比特矩阵, 而 Am 表示 m 个 A 相乘的结果。严谨地说:
- A1=A;
- Am=Am−1×A, m>1。
输入格式
输入第一行包含两个正整数 n,m。
接下来 n 行,每行包含 n 个非负整数,这 n 行中第 i 行的第 j 个数表示比特矩阵 ai,j 的元素 。
输出格式
根据输入,输出一个比特矩阵 Am。即按照输入给出 A 的方式输出一个比特矩阵。 具体参看样例输出。
提示
数据范围及约定
- 对于 10% 的数据 n≤4,m≤10000。
- 对于 30% 的数据 n≤10,m≤109。
- 对于 100% 的数据 n≤500,m≤109, 所有输入的整数不超过109。