http://www.cs.cornell.edu/courses/cs482/2005su/handouts/NPComplete.pdf