Source: https://www.cs.princeton.edu/~appel/papers/tml.pdf