names = ["A", "B", "C", "D", "E", "F", "G", "H", "I"]
days = [2, 3, 2, 3, 4, 5, 3, 2, 1]
after = [[], [0], [1], [1], [2], [3], [4, 5], [2], [6, 7]] # indexes of tasks that must finish first
finish = []
for i in range(len(names)):
start = 0
for p in after[i]: # start after the latest predecessor
if finish[p] > start:
start = finish[p]
finish.append(start + days[i])
print(names[i], "days", start, "to", finish[i])
print("Project length:", max(finish), "days")