Source: http://www.ugr.es/~setchift/docs/tesis_cesarsolano.pdf