public final void dfs(Graph G, int v)
	{
		if (marked[v])
			return;
		
		marked[v] = true;
		preAnyAdjacentVerticesVisit(v);
		
		for (int w : G.adj(v))
			if (!marked[w])
			{
				preAdjacentVertexVisit(v, w);
				dfs(G, w);
				postAdjacentVertexVisit(v, w);	
			}
	}