DFS(G, s)
begin
visited[s] ← true; time++
d[s] ← time
for each v ∈ adj(s) do
if not visited[v] then
DFS(G, v) // recurse
time++; f[s] ← time
end