Source: https://www.labri.fr/perso/hocquard/Files/CoursAlgo/TD6/TD061819.pdf