Source: http://www.cmap.polytechnique.fr/~allaire/map431/MiniProjets/sujets2013/sujet12.pdf