Final version of assignment 1. 10 out 10.