1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from math import lcm

n = int(input())

steps_to_reset = [1] * n
resets_done = [1] * n
has_input = [True] + [False] * (n - 1)
inputs = [[] for i in range(n)]

for i in range(n):
    neighbours = list(map(int, input().split()))
    k = neighbours[0]
    neighbours = neighbours[1:]

    if not has_input[i]:
        continue

    for val in neighbours:
        val -= 1
        has_input[val] = True
        inputs[val].append(i)
    
    if not neighbours:
        continue

    if i == 0:
        steps_to_reset[0] = len(neighbours)
        continue

    my_lcm = lcm(*[steps_to_reset[prev] for prev in inputs[i]])
    steps_done = sum(resets_done[prev] * my_lcm // steps_to_reset[prev] for prev in inputs[i])

    steps_needed = lcm(steps_done, len(neighbours))

    repeats = steps_needed // steps_done

    steps_to_reset[i] = my_lcm * repeats
    resets_done[i] = steps_needed // len(neighbours)

print(lcm(*[steps_to_reset[node] for node in range(n) if has_input[node]]))