more information on this: http://sifaka.cs.uiuc.edu/course/410s11/assign4.html