code: public static <D, N extends TarjanNode<D, N>> List<? extends List<? extends N>> tarjan(Iterable<? extends N> nodes) {
          Tarjan<D, N> tarjan = new Tarjan<>();
          return tarjan.findSCC(nodes);
      }
docs: Tarjan's algorithm to determine strongly connected components of a
  directed graph in linear time. Works on TarjanNode.