Source: https://www.cs.toronto.edu/~zdiskin/Pubs/KluwerBook-2003.pdf