code: private void dfsVisit(DirectedGraph<V, E> visitedGraph, VertexNumber<V> v) 
      {	
      	 VertexNumber<V> w;
      	 stack.add(v);
      	 B.add(v.setNumber(stack.size() - 1));
      	
           // follow all edges
           for (E edge : visitedGraph.outgoingEdgesOf(v.getVertex())) {
          	 
          	 w =  vertexToVertexNumber.get(visitedGraph.getEdgeTarget(edge));
  
               if (w.getNumber() == 0) {
              	 dfsVisit(graph, w);
               }
               else { /*contract if necessary*/
              	 while (w.getNumber() < B.getLast()) 
              		 B.removeLast(); 
               } 
           }
           
           ImmutableSet.Builder<V> L = new ImmutableSet.Builder<>(); 
           if (v.getNumber() == (B.getLast())) { 
          	 /* number vertices of the next strong component */
          	 B.removeLast(); 
                
               c++;
               while (v.getNumber() <= (stack.size()-1)) {
              	 VertexNumber<V> r = stack.removeLast();
                   L.add(r.getVertex()); 
                   r.setNumber(c);
               } 
               stronglyConnectedSets.add(new Equivalences<V>(L.build())); 
           } 
      }
docs: /*
  The subroutine of DFS.