let teach_until_both predicate ?(max=0) teacher =
let rec loop n student examiners grades =
let (res,grades) = teacher student examiners grades in
if (predicate res grades) || (max != 0 && n>max) then
(res,grades)
else
loop (n+1) res examiners grades
in
loop 0