Advanced Programming Assignment 1