sig
  type 'a t
  val empty : unit -> 'Graph.t
  val copy : 'Graph.t -> 'Graph.t
  val add_edge : 'Graph.t -> '-> '-> 'Graph.t
  val add_vertex : 'Graph.t -> '-> 'Graph.t
  val add_adjacency_list : 'Graph.t -> '-> 'a list -> 'Graph.t
  val from_list : 'Graph.t -> ('a * 'a) list -> 'Graph.t
  val adjacent_vertices : 'Graph.t -> '-> 'a list
  val dfs1 : 'Graph.t -> ('a * int * int * int) list
  val is_empty : 'Graph.t -> bool
  val topological_sort : 'Graph.t -> 'a list
  val scc : 'Graph.t -> 'a list list
  val component_graph : 'Graph.t -> 'a list Graph.t
  val reachable : 'Graph.t -> '-> 'a list
  val out_degree : 'Graph.t -> '-> int
  val in_degree : 'Graph.t -> '-> int
  val edges : 'Graph.t -> ('a * 'a) list
  val vertices : 'Graph.t -> 'a list
  val transpose : 'Graph.t -> 'Graph.t
end