let apply_goal goal lists =
if ((List.length lists)=0)
then failwith "Trying to apply goal with an empty list"
else try match goal with
| MaximizeTeams -> List.hd (List.rev lists);
| MinimizeTeams -> List.hd (lists);
| MaxLessEqualTo n ->
List.hd (List.rev (select (fun t -> (fst t) <= n) lists))
| MinMoreEqualTo n ->
List.hd (select (fun t -> (fst t) >= n) lists)
with _ -> failwith "Unable to apply such a goal"