from atcoder.dsu import DSU def main(): n = int(input()) A = [list(map(int, input().split())) for _ in range(n)] a = 0 for aa in A: a += sum(aa) if a % n: return [[]] uf = DSU(n*n) X = [0] * n for y in range(n): for x in range(n): if X[x]: X[x] += A[y][x] uf.merge((y-1)*n+x, y*n+x) else: X[x] = A[y][x] if y == n-1: break D = {} t = 0 D[t] = 0 for x in range(n): t += A[y][x] t %= n if t in D: l = D[t] r = x+1 break D[t] = x+1 for u in range(l, r-1): uf.merge(y*n+y, y*n+u+1) X[u] = 0 X[r-1] = 0 for u in range(n-1): uf.merge(n*n+u-n, n*n+u-n+1) Ans = [[-1] * n for _ in range(n)] i = 1 for g in uf.groups(): s = 0 for u in g: Ans[u//n][u%n] = i s += A[u//n][u%n] s %= n assert not s i += 1 return Ans for _ in range(int(input())): Ans = main() if not Ans[0]: print(-1) else: for ans in Ans: print(*ans)