Source: http://www.cs.cmu.edu/~tom/10601_fall2012/hw/hw4sol.pdf