Source: http://pauillac.inria.fr/~levy/courses/X/IF/poly/main.pdf.gz