http://www.cerol.net/lag-alg/index.htm