sig
  type 'a t
  val empty : unit -> 'Graph1.t
  val clear : 'Graph1.t -> unit
  val copy : 'Graph1.t -> 'Graph1.t
  val add_edge : 'Graph1.t -> '-> '-> unit
  val add_vertex : 'Graph1.t -> '-> unit
  val add_adjacency_list : 'Graph1.t -> '-> 'a list -> unit
  val from_list : 'Graph1.t -> ('a * 'a) list -> unit
  val adjacent_vertices : 'Graph1.t -> '-> 'a list
  val dfs1 : 'Graph1.t -> ('a * int * int * int) list
  val top_sort : 'Graph1.t -> 'a list
  val reachable : 'Graph1.t -> '-> 'a list
  val out_degree : 'Graph1.t -> '-> int
  val in_degree : 'Graph1.t -> '-> int
  val edges : 'Graph1.t -> ('a * 'a) list
  val vertices : 'Graph1.t -> 'a list
  val transpose : 'Graph1.t -> 'Graph1.t
end