let components = 
    let save = ref None in
    fun graph ->
      match !save with
      |None -> begin
          let module C = Components.Make(Gin
          let c = C.scc_array graph in
          save := Some c ;
          c
      end
      |Some c -> c