Source: https://dept-info.labri.fr/~griffaul/Enseignement/MasterBioInfo-11-12/ASD2/corrige.pdf