import sys mod = 998244353 def main(): n = int(sys.stdin.readline()) m0 = [] for _ in range(n): row = list(map(int, sys.stdin.readline().split())) m0.append(row) m1 = [] for _ in range(n): row = list(map(int, sys.stdin.readline().split())) m1.append(row) y = [] for x in range(n + 1): mat = [] for i in range(n): row = [(m0[i][j] + x * m1[i][j]) % mod for j in range(n)] mat.append(row.copy()) det = determinant(mat) y.append(det % mod) size = n + 1 d = [[0] * size for _ in range(size)] for i in range(size): d[i][0] = y[i] for j in range(1, size): inv_j = pow(j, mod-2, mod) for i in range(size - j): numerator = (d[i+1][j-1] - d[i][j-1]) % mod d[i][j] = (numerator * inv_j) % mod newton_coeffs = [d[0][k] for k in range(size)] pre_poly = [[1]] for k in range(1, size): a = k - 1 prev_poly = pre_poly[-1] new_poly = [0] * (len(prev_poly) + 1) for i in range(len(prev_poly)): new_poly[i+1] = prev_poly[i] for i in range(len(prev_poly)): new_poly[i] = (new_poly[i] - a * prev_poly[i]) % mod pre_poly.append(new_poly) result = [0] * size for k in range(size): coeff = newton_coeffs[k] current_p = pre_poly[k] for i in range(len(current_p)): result[i] = (result[i] + coeff * current_p[i]) % mod for coeff in result: print(coeff % mod) def determinant(mat): n = len(mat) det = 1 for i in range(n): pivot = -1 for j in range(i, n): if mat[j][i] != 0: pivot = j break if pivot == -1: return 0 if pivot != i: mat[i], mat[pivot] = mat[pivot], mat[i] det = (-det) % mod inv = pow(mat[i][i], mod-2, mod) det = (det * mat[i][i]) % mod mat[i][i] = 1 for j in range(i+1, n): mat[i][j] = (mat[i][j] * inv) % mod for j in range(i+1, n): factor = mat[j][i] for k in range(i, n): mat[j][k] = (mat[j][k] - factor * mat[i][k]) % mod return det % mod if __name__ == "__main__": main()