For the CSCI403 course at Colorado School of Mines