Source: https://www.fil.univ-lille1.fr/~weinberl/Maths_discretes/docs/15-16_ds_2_avec.pdf