Source: https://www.lri.fr/~chris/LivreAlgorithmique/FroidevauxGaudelSoria.pdf