Source: http://graal.ift.ulaval.ca/public/cours/mathinfo/mathinfo_automne2104.pdf