fixed max_uncovered(), it now greedily selected the level with most uncovered pairs. also fixed bug with evaluation of math.ceil on a float expression; it was evaluating the expression as integers and caused a rounding error. explicitly casting each variable in expression as a float corrects evaluation of math.ceil