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