Source: https://cours.etsmtl.ca/log660/public_docs/exercices/Chap4_solutions_godin.pdf