Suppose a CS program consists of n courses. The prerequisite graph G has a vertex for each course, and an edge from course v to course w if and only if v is a prerequisite for w. Design a linear-time algorithm that works directly with this graph representation and computes the minimum number of semesters necessary to complete the program, assuming that a student can take any number of courses in one semester. Be sure to prove the correctness of your algorithm and its running time.