http://www.karrels.org/Ed/ACM/95/prob_f.html