from collections import deque
n = int(input())
graph=[]
for i in range(n):
graph.append(list(map(int , list(input()))))
q = deque()
visited_mask = 1
visited_dict={}
visited_dict[1]=1
q.append([0,visited_mask,1,0])
answer= 0
while q:
cur = q.pop()
seller = cur[0]
mask = cur[1]
count = cur[2]
amount = cur[3]
answer = max(answer,count)
for i in range(n):
if graph[seller][i]>=amount and mask & (1<<i)==0:
new_mask = mask | (1<<i)
q.append([i,new_mask,count+1,graph[seller][i]])
print(answer)
방문 상태를 저장 할 경우 배열로 선언하는 것보다 비트마스킹 형태의 정수로 저장하면 공간복잡도 측면에서 효율적으로 코드 작성 가능