Source: https://www.cs.mcgill.ca/~cs520/2019/project/Blank_Specifications.pdf