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