The final project for CSI2772 at uOttawa