Final project for Harvard's CSCI E-253, Fall 2012.