Source: https://pagesperso.ls2n.fr/~idier-j/teach/poly1.pdf