DFS, recursive
  d[u] = 1   u -> gray
    edge (u,v) is a tree edge
  d[v] = 2   v -> gray
    edge (v,y) is a tree edge
  d[y] = 3   y -> gray
    edge (y,x) is a tree edge
  d[x] = 4   x -> gray
    edge (x,v) is a back edge
  f[x] = 5   x -> black
  f[y] = 6   y -> black
  f[v] = 7   v -> black
    edge (u,x) is a forward edge
  f[u] = 8   u -> black
  d[w] = 9   w -> gray
    edge (w,y) is a cross edge
    edge (w,z) is a tree edge
  d[z] = 10   z -> gray
    edge (z,z) is a back edge
  f[z] = 11   z -> black
  f[w] = 12   w -> black

timestamps
  vertex :   u   v   w   x   y   z
  d/f    : 1/8 2/7 9/12 4/5 3/6 10/11

parenthesization
  (u (v (y (x x) y) v) u) (w (z z) w) 

depth-first forest (tree edges)
  (u,v) (y,x) (v,y) (w,z) 
  roots: u w 

edge classification
  (u,v)  tree
  (v,y)  tree
  (y,x)  tree
  (x,v)  back
  (u,x)  forward
  (w,y)  cross
  (w,z)  tree
  (z,z)  back

vertices in order of finishing
  x y v u z w 
