Source: https://www.i3s.unice.fr/~elozes/enseignement/Archives/2018_2019/AlgoPython/cours9.pdf