Source: http://webpages.lss.supelec.fr/perso/hugues.mounier/Teaching/Java_files/JExamens/examenJavaF3EICode-01-02-solution.pdf