Final project for CS 110 (second attempt)