Assignment 1 complete version