Source: https://algo.gricad-pages.univ-grenoble-alpes.fr/L3I-S5-algo/TD1-1-corrige.pdf