public void tarjanSCC(int u) {
			dfs_num[u] = dfs_low[u] = dfsNumberCounter++;
			s.push(u);
			visited[u] = true;
			for (int i = 0; i < ady[u].size(); i++) {
				int v = ady[u].get(i);
				if (dfs_num[v] == -1)
					tarjanSCC(v);
				if (visited[v])
					dfs_low[u] = Math.min(dfs_low[u], dfs_low[v]);
			}
			if (dfs_low[u] == dfs_num[u]) {
				res.add(new ArrayList<Integer>());
				int v;
				do {
					v = s.pop();
					res.get(numSCC).add(v);
					visited[v] = false;
				} while (u != v);
				numSCC++;
			}
		}