private static void computeSCCs() {

		// reset all nodes to unexplored
		for (int i = 0; i < nodes.length; i++) {
			nodes[i] = 0;
		}

		// iterate over all vertices and compute DFS
		for (int i = nodesSortedByFinishTime.length-1; i >= 0; i--) {
			if(nodes[nodesSortedByFinishTime[i]] == 0) {
				// node is unexplored
				sccSize = 0;
				dfs(new Integer(nodesSortedByFinishTime[i]));
				//System.out.println("sccSize :: " + sccSize);
				sccSizes.add(new Integer(sccSize));
			}
		}

		int sccs[] = new int[sccSizes.size()];
		for (int i = 0; i < sccs.length; i++) {
			sccs[i] = sccSizes.get(i).intValue();
		}

		// sort them
		Arrays.sort(sccs);

		for (int i = 0; i < 5; i++) {
			if(sccs.length - 1 - i >= 0) {
				System.out.println(sccs[sccs.length - 1 - i]);
			}
		}
	}