sig   type 'a sequence = ('-> unit) -> unit   module type S =     sig       type key       type value       type t       val empty : CCMultiMap.S.t       val is_empty : CCMultiMap.S.t -> bool       val add :         CCMultiMap.S.t ->         CCMultiMap.S.key -> CCMultiMap.S.value -> CCMultiMap.S.t       val remove :         CCMultiMap.S.t ->         CCMultiMap.S.key -> CCMultiMap.S.value -> CCMultiMap.S.t       val remove_all : CCMultiMap.S.t -> CCMultiMap.S.key -> CCMultiMap.S.t       val mem : CCMultiMap.S.t -> CCMultiMap.S.key -> bool       val find :         CCMultiMap.S.t -> CCMultiMap.S.key -> CCMultiMap.S.value list       val find_iter :         CCMultiMap.S.t ->         CCMultiMap.S.key -> (CCMultiMap.S.value -> unit) -> unit       val count : CCMultiMap.S.t -> CCMultiMap.S.key -> int       val iter :         CCMultiMap.S.t ->         (CCMultiMap.S.key -> CCMultiMap.S.value -> unit) -> unit       val fold :         CCMultiMap.S.t ->         '-> ('-> CCMultiMap.S.key -> CCMultiMap.S.value -> 'a) -> 'a       val size : CCMultiMap.S.t -> int       val union : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t       val inter : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t       val diff : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t       val equal : CCMultiMap.S.t -> CCMultiMap.S.t -> bool       val compare : CCMultiMap.S.t -> CCMultiMap.S.t -> int       val submap : CCMultiMap.S.t -> CCMultiMap.S.t -> bool       val to_seq :         CCMultiMap.S.t ->         (CCMultiMap.S.key * CCMultiMap.S.value) CCMultiMap.sequence       val of_seq :         ?init:CCMultiMap.S.t ->         (CCMultiMap.S.key * CCMultiMap.S.value) CCMultiMap.sequence ->         CCMultiMap.S.t       val keys : CCMultiMap.S.t -> CCMultiMap.S.key CCMultiMap.sequence       val values : CCMultiMap.S.t -> CCMultiMap.S.value CCMultiMap.sequence     end   module type OrderedType =     sig       type t       val compare :         CCMultiMap.OrderedType.t -> CCMultiMap.OrderedType.t -> int     end   module Make :     functor (K : OrderedType) (V : OrderedType->       sig         type key = K.t         type value = V.t         type t         val empty : t         val is_empty : t -> bool         val add : t -> key -> value -> t         val remove : t -> key -> value -> t         val remove_all : t -> key -> t         val mem : t -> key -> bool         val find : t -> key -> value list         val find_iter : t -> key -> (value -> unit) -> unit         val count : t -> key -> int         val iter : t -> (key -> value -> unit) -> unit         val fold : t -> '-> ('-> key -> value -> 'a) -> 'a         val size : t -> int         val union : t -> t -> t         val inter : t -> t -> t         val diff : t -> t -> t         val equal : t -> t -> bool         val compare : t -> t -> int         val submap : t -> t -> bool         val to_seq : t -> (key * value) sequence         val of_seq : ?init:t -> (key * value) sequence -> t         val keys : t -> key sequence         val values : t -> value sequence       end   module type BIDIR =     sig       type t       type left       type right       val empty : CCMultiMap.BIDIR.t       val is_empty : CCMultiMap.BIDIR.t -> bool       val add :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.right -> CCMultiMap.BIDIR.t       val remove :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.right -> CCMultiMap.BIDIR.t       val cardinal_left : CCMultiMap.BIDIR.t -> int       val cardinal_right : CCMultiMap.BIDIR.t -> int       val remove_left :         CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.t       val remove_right :         CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.right -> CCMultiMap.BIDIR.t       val mem_left : CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.left -> bool       val mem_right : CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.right -> bool       val find_left :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.right CCMultiMap.sequence       val find_right :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.right -> CCMultiMap.BIDIR.left CCMultiMap.sequence       val find1_left :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.right option       val find1_right :         CCMultiMap.BIDIR.t ->         CCMultiMap.BIDIR.right -> CCMultiMap.BIDIR.left option       val fold :         ('-> CCMultiMap.BIDIR.left -> CCMultiMap.BIDIR.right -> 'a) ->         '-> CCMultiMap.BIDIR.t -> 'a       val pairs :         CCMultiMap.BIDIR.t ->         (CCMultiMap.BIDIR.left * CCMultiMap.BIDIR.right) CCMultiMap.sequence       val add_pairs :         CCMultiMap.BIDIR.t ->         (CCMultiMap.BIDIR.left * CCMultiMap.BIDIR.right) CCMultiMap.sequence ->         CCMultiMap.BIDIR.t       val seq_left :         CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.left CCMultiMap.sequence       val seq_right :         CCMultiMap.BIDIR.t -> CCMultiMap.BIDIR.right CCMultiMap.sequence     end   module MakeBidir :     functor (L : OrderedType) (R : OrderedType->       sig         type t         type left = L.t         type right = R.t         val empty : t         val is_empty : t -> bool         val add : t -> left -> right -> t         val remove : t -> left -> right -> t         val cardinal_left : t -> int         val cardinal_right : t -> int         val remove_left : t -> left -> t         val remove_right : t -> right -> t         val mem_left : t -> left -> bool         val mem_right : t -> right -> bool         val find_left : t -> left -> right sequence         val find_right : t -> right -> left sequence         val find1_left : t -> left -> right option         val find1_right : t -> right -> left option         val fold : ('-> left -> right -> 'a) -> '-> t -> 'a         val pairs : t -> (left * right) sequence         val add_pairs : t -> (left * right) sequence -> t         val seq_left : t -> left sequence         val seq_right : t -> right sequence       end end