final assignment version