import sys
sys.setrecursionlimit(10000)
N = int(input())
dfs_list = []
for _ in range(N):
dfs_list.append(list(map(int, input().split()))) # 주어진 조건대로 리스트를 만들어준다.
def dfs(n):
if visited[n] == True:
return False
visited[n] = True
for i in range(N):
if dfs_list[n][i] == 1:
tracking.append(i) # 경로 저장
dfs(i)
for n in range(N):
tracking = [] # 각 행마다 지나온 경로를 탐색하기 위해 tracking이라는 리스트를 만들어주고 매번 초기화 해준다.
visited = [False] * N # 방문한 지점을 체크하기 위해서 visited 리스트를 만들어준다.
# 다만, 0부터 N까지 모든 행을 체크해야하기 때문에 매번 방문 기록을 초기화 해줘야한다.
dfs(n)
for k in tracking:
dfs_list[n][k] = 1 # 경로 탐색이 끝나고 tracking에 있는 요소들을 열로 바꾸어서 1로 입력해준다.
for i in dfs_list:
for k in range(N):
print(i[k], end=" ")
print()