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