Source: https://www.subr.edu/assets/subr/ComputerScience/PDFS/Syllabi/2018/Spring/Syllabus271-Spring-2018_Jackson.pdf