Source: https://infocomp.dcc.ufla.br/index.php/infocomp/article/view/21/8