Source: https://cours.polymtl.ca/inf2610/ExercicesPDFs/OrdonnancementCorrige.pdf