Program Assignment 2 solution