2
def firstDayBeenInAllRooms(self, nextVisit: List[int]) -> int:3
n: int = len(nextVisit)4
days: List[int] = n * [6
] # days[i] is the number of days it takes to first reach room i8
for i in range(0, n - 1):9
# First we are already at room i. days[i] days has passed11
# lets go from room i to room i+1.12
# When we first visit room i, we need to visit room i again (so room i is visited twice, which is an even number), then we can visit room i+113
# after we fist visit room i, the next day we will visit room (nextVisit[i]).14
days[i + 1] = (days[i + 1] + 1) % MOD15
# Then the problem becomes "how to go from room (nextVisit[i]) back to room i". The step is (days[i] - days[nextVisit[i]])16
days[i + 1] = (days[i + 1] + days[i] - days[nextVisit[i]]) % MOD17
# Then, in the next day we go from room i to i+118
days[i + 1] = (days[i + 1] + 1) % MOD