Programming Assignment 2 Final Version