Final project for CPSC 438