sig
  val list_of_self : int -> 'a -> 'a list
  val cross_product : 'a list -> 'b list -> ('a * 'b) list
  module MakeOrderedSetPair :
    functor (Ordered : Set.OrderedType) ->
      sig type t = Ordered.t * Ordered.t val compare : t -> t -> int end
end