import sys
from collections import defaultdict
def dfs(graph, node, visited, depth):
visited.add(node)
max_depth = depth
for neighbor in graph[node]:
if neighbor not in visited:
max_depth = max(max_depth, dfs(graph, neighbor, visited, depth + 1))
return max_depth
def process_graph(graph):
visited = set()
heights = []
for node in graph:
if node not in visited:
height = dfs(graph, node, visited, 0)
heights.append(height)
return heights
input = sys.stdin.read().splitlines()
index = 0
graphs = []
while index < len(input):
n = int(input[index])
index += 1
graph = defaultdict(list)
for i in range(n):
line = list(map(int, input[index].split()))
graph[i] = line
index += 1
graphs.append(graph)
results = []
for graph in graphs:
heights = process_graph(graph)
results.append(heights)
for heights in results:
print(" ".join(map(str, heights)))
aW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKCmRlZiBkZnMoZ3JhcGgsIG5vZGUsIHZpc2l0ZWQsIGRlcHRoKToKICAgIHZpc2l0ZWQuYWRkKG5vZGUpCiAgICBtYXhfZGVwdGggPSBkZXB0aAoKICAgIGZvciBuZWlnaGJvciBpbiBncmFwaFtub2RlXToKICAgICAgICBpZiBuZWlnaGJvciBub3QgaW4gdmlzaXRlZDoKICAgICAgICAgICAgbWF4X2RlcHRoID0gbWF4KG1heF9kZXB0aCwgZGZzKGdyYXBoLCBuZWlnaGJvciwgdmlzaXRlZCwgZGVwdGggKyAxKSkKCiAgICByZXR1cm4gbWF4X2RlcHRoCgpkZWYgcHJvY2Vzc19ncmFwaChncmFwaCk6CiAgICB2aXNpdGVkID0gc2V0KCkKICAgIGhlaWdodHMgPSBbXQoKICAgIGZvciBub2RlIGluIGdyYXBoOgogICAgICAgIGlmIG5vZGUgbm90IGluIHZpc2l0ZWQ6CiAgICAgICAgICAgIGhlaWdodCA9IGRmcyhncmFwaCwgbm9kZSwgdmlzaXRlZCwgMCkKICAgICAgICAgICAgaGVpZ2h0cy5hcHBlbmQoaGVpZ2h0KQoKICAgIHJldHVybiBoZWlnaHRzCgppbnB1dCA9IHN5cy5zdGRpbi5yZWFkKCkuc3BsaXRsaW5lcygpCmluZGV4ID0gMApncmFwaHMgPSBbXQoKd2hpbGUgaW5kZXggPCBsZW4oaW5wdXQpOgogICAgbiA9IGludChpbnB1dFtpbmRleF0pCiAgICBpbmRleCArPSAxCiAgICBncmFwaCA9IGRlZmF1bHRkaWN0KGxpc3QpCgogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgbGluZSA9IGxpc3QobWFwKGludCwgaW5wdXRbaW5kZXhdLnNwbGl0KCkpKQogICAgICAgIGdyYXBoW2ldID0gbGluZQogICAgICAgIGluZGV4ICs9IDEKCiAgICBncmFwaHMuYXBwZW5kKGdyYXBoKQoKcmVzdWx0cyA9IFtdCmZvciBncmFwaCBpbiBncmFwaHM6CiAgICBoZWlnaHRzID0gcHJvY2Vzc19ncmFwaChncmFwaCkKICAgIHJlc3VsdHMuYXBwZW5kKGhlaWdodHMpCgpmb3IgaGVpZ2h0cyBpbiByZXN1bHRzOgogICAgcHJpbnQoIiAiLmpvaW4obWFwKHN0ciwgaGVpZ2h0cykpKQo=