Source: https://www.cs.princeton.edu/courses/archive/fall19/cos217/precepts/18overrun/conditions.pdf