Source: http://igm.univ-mlv.fr/~pivoteau/STRUCT/TD/struct_tp1.pdf