Source: https://www2.ift.ulaval.ca/~dad?/cours/A19/3101/exercs4.pdf