http://www.ccs.neu.edu/home/cbw/4700/project2.html