Source: https://cs.nyu.edu/~wies/teaching/cso-fa19/class06_cio.pdf