sig
  module type GRAPH_acyclic =
    sig
      type graph
      and node
      val iter_nodes :
        (Avl_kernel.GRAPH_acyclic.node -> unit) ->
        Avl_kernel.GRAPH_acyclic.graph -> unit
      val iter_successors :
        (Avl_kernel.GRAPH_acyclic.node -> unit) ->
        Avl_kernel.GRAPH_acyclic.node -> unit
      val get : Avl_kernel.GRAPH_acyclic.node -> int
      val set : Avl_kernel.GRAPH_acyclic.node -> int -> unit
    end
  module Make_acyclic :
    functor (X : GRAPH_acyclic->
      sig
        exception Cyclic
        val fold : '-> (X.node -> X.node -> '-> 'a) -> X.graph -> 'a
      end
  type 'a scc
  val scc : unit -> 'Avl_kernel.scc
  module type GRAPH =
    sig
      type graph
      and node
      val iter_nodes :
        (Avl_kernel.GRAPH.node -> unit) -> Avl_kernel.GRAPH.graph -> unit
      val iter_successors :
        (Avl_kernel.GRAPH.node -> unit) -> Avl_kernel.GRAPH.node -> unit
      val get_scc :
        Avl_kernel.GRAPH.node -> Avl_kernel.GRAPH.node Avl_kernel.scc
      val set_scc :
        Avl_kernel.GRAPH.node -> Avl_kernel.GRAPH.node Avl_kernel.scc -> unit
      val get : Avl_kernel.GRAPH.node -> int
      val set : Avl_kernel.GRAPH.node -> int -> unit
    end
  module Make :
    functor (X : GRAPH->
      sig
        val fold : '-> (X.node -> X.node -> '-> 'a) -> X.graph -> 'a
      end
end