Source: https://people.cs.umass.edu/~verts/cmpsci201/fall2006/Midterm_1_solution.pdf