Source: http://www-verimag.imag.fr/~wack/ALGO5/sujet-td2-6-corrige.pdf