import os
import sys
from io import BytesIO, IOBase
def multiply(A, B, dim):
N = 1000000007
res = [[0] * dim for _ in range(dim)]
for i in range(dim):
for j in range(dim):
res[i][j] = 0
for k in range(dim):
res[i][j] += (A[i][k]%N * B[k][j]%N) % N
for i in range(dim):
for j in range(dim):
A[i][j] = res[i][j]
def power(mat, dim, n):
I = [[1 if (i == j) else 0 for j in range(dim)] for i in range(dim)]
while n:
if n & 1:
multiply(I, mat, dim)
n -= 1
else:
multiply(mat, mat, dim)
n //= 2
for i in range(dim):
for j in range(dim):
mat[i][j] = I[i][j]
def main():
for _ in range(r_int()):
m, n = r_array()
mat = []
for _ in range(m):
mat.append(r_array())
power(mat, m, n)
for row in mat:
write(*row)
# fast-io region
BUFSIZE = 8192
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
self.newlines = b.count(b"\n") + (not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s: self.buffer.write(s.encode("ascii"))
self.read = lambda: self.buffer.read().decode("ascii")
self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
def input():
return sys.stdin.readline().rstrip("\r\n")
def write(*args, end='\n'):
for x in args[:-1]:
sys.stdout.write(str(x) + ' ')
sys.stdout.write(str(args[-1]))
sys.stdout.write(end)
def r_array():
return [int(x) for x in input().split()]
def r_int():
return int(input())
if __name__ == "__main__":
main()
aW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgSU9CYXNlCgoKZGVmIG11bHRpcGx5KEEsIEIsIGRpbSk6CiAgICBOID0gMTAwMDAwMDAwNwogICAgcmVzID0gW1swXSAqIGRpbSBmb3IgXyBpbiByYW5nZShkaW0pXQoKICAgIGZvciBpIGluIHJhbmdlKGRpbSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoZGltKToKICAgICAgICAgICAgcmVzW2ldW2pdID0gMAogICAgICAgICAgICBmb3IgayBpbiByYW5nZShkaW0pOgogICAgICAgICAgICAgICAgcmVzW2ldW2pdICs9IChBW2ldW2tdJU4gKiBCW2tdW2pdJU4pICUgTgoKICAgIGZvciBpIGluIHJhbmdlKGRpbSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoZGltKToKICAgICAgICAgICAgQVtpXVtqXSA9IHJlc1tpXVtqXQoKCmRlZiBwb3dlcihtYXQsIGRpbSwgbik6CiAgICBJID0gW1sxIGlmIChpID09IGopIGVsc2UgMCBmb3IgaiBpbiByYW5nZShkaW0pXSBmb3IgaSBpbiByYW5nZShkaW0pXQoKICAgIHdoaWxlIG46CiAgICAgICAgaWYgbiAmIDE6CiAgICAgICAgICAgIG11bHRpcGx5KEksIG1hdCwgZGltKQogICAgICAgICAgICBuIC09IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBtdWx0aXBseShtYXQsIG1hdCwgZGltKQogICAgICAgICAgICBuIC8vPSAyCgogICAgZm9yIGkgaW4gcmFuZ2UoZGltKToKICAgICAgICBmb3IgaiBpbiByYW5nZShkaW0pOgogICAgICAgICAgICBtYXRbaV1bal0gPSBJW2ldW2pdCgoKZGVmIG1haW4oKToKICAgIGZvciBfIGluIHJhbmdlKHJfaW50KCkpOgogICAgICAgIG0sIG4gPSByX2FycmF5KCkKICAgICAgICBtYXQgPSBbXQogICAgICAgIGZvciBfIGluIHJhbmdlKG0pOgogICAgICAgICAgICBtYXQuYXBwZW5kKHJfYXJyYXkoKSkKCiAgICAgICAgcG93ZXIobWF0LCBtLCBuKQoKICAgICAgICBmb3Igcm93IGluIG1hdDoKICAgICAgICAgICAgd3JpdGUoKnJvdykKCgojIGZhc3QtaW8gcmVnaW9uCkJVRlNJWkUgPSA4MTkyCgoKY2xhc3MgRmFzdElPKElPQmFzZSk6CiAgICBuZXdsaW5lcyA9IDAKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSk6CiAgICAgICAgc2VsZi5fZmQgPSBmaWxlLmZpbGVubygpCiAgICAgICAgc2VsZi5idWZmZXIgPSBCeXRlc0lPKCkKICAgICAgICBzZWxmLndyaXRhYmxlID0gIngiIGluIGZpbGUubW9kZSBvciAiciIgbm90IGluIGZpbGUubW9kZQogICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmJ1ZmZlci53cml0ZSBpZiBzZWxmLndyaXRhYmxlIGVsc2UgTm9uZQoKICAgIGRlZiByZWFkKHNlbGYpOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGIgPSBvcy5yZWFkKHNlbGYuX2ZkLCBtYXgob3MuZnN0YXQoc2VsZi5fZmQpLnN0X3NpemUsIEJVRlNJWkUpKQogICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIHB0ciA9IHNlbGYuYnVmZmVyLnRlbGwoKQogICAgICAgICAgICBzZWxmLmJ1ZmZlci5zZWVrKDAsIDIpLCBzZWxmLmJ1ZmZlci53cml0ZShiKSwgc2VsZi5idWZmZXIuc2VlayhwdHIpCiAgICAgICAgc2VsZi5uZXdsaW5lcyA9IDAKICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIucmVhZCgpCgogICAgZGVmIHJlYWRsaW5lKHNlbGYpOgogICAgICAgIHdoaWxlIHNlbGYubmV3bGluZXMgPT0gMDoKICAgICAgICAgICAgYiA9IG9zLnJlYWQoc2VsZi5fZmQsIG1heChvcy5mc3RhdChzZWxmLl9mZCkuc3Rfc2l6ZSwgQlVGU0laRSkpCiAgICAgICAgICAgIHNlbGYubmV3bGluZXMgPSBiLmNvdW50KGIiXG4iKSArIChub3QgYikKICAgICAgICAgICAgcHRyID0gc2VsZi5idWZmZXIudGVsbCgpCiAgICAgICAgICAgIHNlbGYuYnVmZmVyLnNlZWsoMCwgMiksIHNlbGYuYnVmZmVyLndyaXRlKGIpLCBzZWxmLmJ1ZmZlci5zZWVrKHB0cikKICAgICAgICBzZWxmLm5ld2xpbmVzIC09IDEKICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIucmVhZGxpbmUoKQoKICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICBpZiBzZWxmLndyaXRhYmxlOgogICAgICAgICAgICBvcy53cml0ZShzZWxmLl9mZCwgc2VsZi5idWZmZXIuZ2V0dmFsdWUoKSkKICAgICAgICAgICAgc2VsZi5idWZmZXIudHJ1bmNhdGUoMCksIHNlbGYuYnVmZmVyLnNlZWsoMCkKCgpjbGFzcyBJT1dyYXBwZXIoSU9CYXNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlKToKICAgICAgICBzZWxmLmJ1ZmZlciA9IEZhc3RJTyhmaWxlKQogICAgICAgIHNlbGYuZmx1c2ggPSBzZWxmLmJ1ZmZlci5mbHVzaAogICAgICAgIHNlbGYud3JpdGFibGUgPSBzZWxmLmJ1ZmZlci53cml0YWJsZQogICAgICAgIHNlbGYud3JpdGUgPSBsYW1iZGEgczogc2VsZi5idWZmZXIud3JpdGUocy5lbmNvZGUoImFzY2lpIikpCiAgICAgICAgc2VsZi5yZWFkID0gbGFtYmRhOiBzZWxmLmJ1ZmZlci5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgc2VsZi5yZWFkbGluZSA9IGxhbWJkYTogc2VsZi5idWZmZXIucmVhZGxpbmUoKS5kZWNvZGUoImFzY2lpIikKCgpzeXMuc3RkaW4sIHN5cy5zdGRvdXQgPSBJT1dyYXBwZXIoc3lzLnN0ZGluKSwgSU9XcmFwcGVyKHN5cy5zdGRvdXQpCgoKZGVmIGlucHV0KCk6CiAgICByZXR1cm4gc3lzLnN0ZGluLnJlYWRsaW5lKCkucnN0cmlwKCJcclxuIikKCgpkZWYgd3JpdGUoKmFyZ3MsIGVuZD0nXG4nKToKICAgIGZvciB4IGluIGFyZ3NbOi0xXToKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cih4KSArICcgJykKICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKGFyZ3NbLTFdKSkKICAgIHN5cy5zdGRvdXQud3JpdGUoZW5kKQoKCmRlZiByX2FycmF5KCk6CiAgICByZXR1cm4gW2ludCh4KSBmb3IgeCBpbiBpbnB1dCgpLnNwbGl0KCldCgoKZGVmIHJfaW50KCk6CiAgICByZXR1cm4gaW50KGlucHV0KCkpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQo=