Source: http://web.eecs.umich.edu/~dnoll/EECS556_02/exam1_sol.pdf