Source: https://euler.ac-versailles.fr/IMG/pdf/olympiades_internationales_2014_exercice2_corrige_olymp2014.pdf