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)
   )