Source: https://perso.liris.cnrs.fr/lionel.medini/enseignement/M1IF01/CM-patterns.pdf