Advanced Programming Assignment 2