My final submission for COMP 580 at UNC