Source: http://icps.u-strasbg.fr/~vivien/Enseignement/Algo-2001-2002/Corrige-TD08.pdf