Final version of this assignment.