public boolean isSCC() {
        Set<V> visited = new HashSet<>();

        //Step 1 : clone and obtain a reversed graph
        MyGraph<V,E> reversed = cloneAndReverse();

        //Step 2: Calculate finishing times.. pass the vertex one by one
        Set<Vertex<V>> vertices = reversed.getAllVertex();
        //stack will have elements in order of their finishing times
        LinkedList<Vertex<V>> stack = new LinkedList<>();
        for(Vertex<V> vertex : vertices){
            if(!visited.contains(vertex.data)){
                dfsFinishingTime(reversed, stack, visited, vertex);
            }
        }

        if(stack.size()!=vertices.size()){
            return false;
        }

        //step 3 : on unreversed graph now go through stack one by one and do a dfs.. collect the DFS elements in scc set
        visited.clear();
        List<Set<Vertex<V>>> scc = new ArrayList<>();
        while(!stack.isEmpty()){
            Vertex<V> vertex = stack.pop();
            Set<Vertex<V>> component =  new HashSet<Vertex<V>>();
            if(!visited.contains(vertex.data)){
                dfsSCC((MyGraph) this, component, visited,vertex);
                scc.add(component);
            }
        }


       return scc.size()==1 && scc.get(0).size() == vertices.size();

    }