import sys
from collections import deque, defaultdict
def bfs(graph, start, visited):
queue = deque([(start, 0)])
visited.add(start)
max_depth = 0
while queue:
node, depth = queue.popleft()
max_depth = max(max_depth, depth)
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append((neighbor, depth + 1))
return max_depth
# Read the input from stdin
def read_input():
input = sys.stdin.read().splitlines()
n = int(input[0]) # number of nodes
graph = defaultdict(list)
for i in range(n):
line = list(map(int, input[i + 1].split()))
graph[i] = line # adjacency list for each node
return graph
# Main function
def main():
graph = read_input()
visited = set()
heights = []
for node in graph:
if node not in visited:
height = bfs(graph, node, visited)
heights.append(height)
# Print the heights of each tree in the BFS forest
for height in heights:
if height>0:
print(height, end=" ")
# Entry point
main()
aW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgZGVmYXVsdGRpY3QKCmRlZiBiZnMoZ3JhcGgsIHN0YXJ0LCB2aXNpdGVkKToKICAgIHF1ZXVlID0gZGVxdWUoWyhzdGFydCwgMCldKQogICAgdmlzaXRlZC5hZGQoc3RhcnQpCiAgICBtYXhfZGVwdGggPSAwCiAgICAKICAgIHdoaWxlIHF1ZXVlOgogICAgICAgIG5vZGUsIGRlcHRoID0gcXVldWUucG9wbGVmdCgpCiAgICAgICAgbWF4X2RlcHRoID0gbWF4KG1heF9kZXB0aCwgZGVwdGgpCiAgICAgICAgCiAgICAgICAgZm9yIG5laWdoYm9yIGluIGdyYXBoW25vZGVdOgogICAgICAgICAgICBpZiBuZWlnaGJvciBub3QgaW4gdmlzaXRlZDoKICAgICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yKQogICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKChuZWlnaGJvciwgZGVwdGggKyAxKSkKICAgIAogICAgcmV0dXJuIG1heF9kZXB0aAoKIyBSZWFkIHRoZSBpbnB1dCBmcm9tIHN0ZGluCmRlZiByZWFkX2lucHV0KCk6CiAgICBpbnB1dCA9IHN5cy5zdGRpbi5yZWFkKCkuc3BsaXRsaW5lcygpCiAgICBuID0gaW50KGlucHV0WzBdKSAgIyBudW1iZXIgb2Ygbm9kZXMKICAgIGdyYXBoID0gZGVmYXVsdGRpY3QobGlzdCkKICAgIAogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgbGluZSA9IGxpc3QobWFwKGludCwgaW5wdXRbaSArIDFdLnNwbGl0KCkpKQogICAgICAgIGdyYXBoW2ldID0gbGluZSAgIyBhZGphY2VuY3kgbGlzdCBmb3IgZWFjaCBub2RlCiAgICAKICAgIHJldHVybiBncmFwaAoKIyBNYWluIGZ1bmN0aW9uCmRlZiBtYWluKCk6CiAgICBncmFwaCA9IHJlYWRfaW5wdXQoKQogICAgCiAgICB2aXNpdGVkID0gc2V0KCkKICAgIGhlaWdodHMgPSBbXQoKICAgIGZvciBub2RlIGluIGdyYXBoOgogICAgICAgIGlmIG5vZGUgbm90IGluIHZpc2l0ZWQ6CiAgICAgICAgICAgIGhlaWdodCA9IGJmcyhncmFwaCwgbm9kZSwgdmlzaXRlZCkKICAgICAgICAgICAgaGVpZ2h0cy5hcHBlbmQoaGVpZ2h0KQoKICAgICMgUHJpbnQgdGhlIGhlaWdodHMgb2YgZWFjaCB0cmVlIGluIHRoZSBCRlMgZm9yZXN0CiAgICBmb3IgaGVpZ2h0IGluIGhlaWdodHM6CiAgICAJaWYgaGVpZ2h0PjA6CiAgICAgICAgCXByaW50KGhlaWdodCwgZW5kPSIgIikKCiMgRW50cnkgcG9pbnQKbWFpbigpCg==