let rec merge_lists comp lists =
let rec aux accu = function
| a::b::t -> aux (List.merge comp a b :: accu) t
| a::[] -> (match accu with [] -> a | _ -> aux [] (a::accu))
| [] -> (match accu with _::_::_ -> aux [] accu | _ -> List.hd accu)
in aux [] lists