The course in this **maximal independent set** is assigned to the second time slot. We repeat this process of *finding and deleting* maximal independent sets until no more nodes remain in the course-conflict graph. At this point, all courses will have been assigned to time slots. In our example, after two iterations, the only remaining node in the *course-conflict graph is Math*, and this forms the final maxi- mal independent set, which is assigned to the third time slot. The resulting exam This *algorithm* does not necessarily partition the courses among the smallest possible number of **time slots**, but it is simple and does tend to produce a schedule with close to the smallest number of time slots.

Notice that this approach **abstracts away** some details of the problem that may be important. For example, it could cause one student to have* five exams in five consecutive time slots.* We could create a model that included limits on how many exams in a row one student could take, but then both the model and the solution to the exam-scheduling problem would be more complicated.

Often, finding a **good abstraction** can be quite difficult because we are forced to confront the *fundamental limitations* on the tasks computers can perform and the speed with which computers can perform those tasks.