finished programming assigment