Source: https://cosc.canterbury.ac.nz/tim.bell/dt/Tutorial_Pseudocode.pdf