Source: https://www.irem.univ-mrs.fr/IMG/pdf/algo2011-heron.pdf