Source: http://olivier.guibe.free.fr/pdf/permutation.pdf