CS-576 Final project