Final assignment for CS3305b