let make_teacher data permutation trainer =
let perm = permutation (Array.length data) in
(fun student examiners grades ->
let perm = perm () in
let res = Array.fold_left (fun s i -> trainer s data.(i)) student perm in
let next_grades = make_exam examiners res in
(res,next_grades :: grades)
)