final version of the assignment