Source: https://perso.liris.cnrs.fr/gilles.gesquiere/Teaching/iut/A1/Algo/TD07-Algo_2006_07.pdf