DFS, iterative (explicit stack)
  step 1  push u (root), d=1   stack = [u]
  step 2  edge (u,v) tree: push v, d=2   stack = [u v]
  step 3  edge (v,y) tree: push y, d=3   stack = [u v y]
  step 4  edge (y,x) tree: push x, d=4   stack = [u v y x]
  step 5  edge (x,v) back   stack = [u v y x]
  step 6  pop  x, f=5        stack = [u v y]
  step 7  pop  y, f=6        stack = [u v]
  step 8  pop  v, f=7        stack = [u]
  step 9  edge (u,x) forward   stack = [u]
  step 10  pop  u, f=8        stack = [ ]
  step 11  push w (root), d=9   stack = [w]
  step 12  edge (w,y) cross   stack = [w]
  step 13  edge (w,z) tree: push z, d=10   stack = [w z]
  step 14  edge (z,z) back   stack = [w z]
  step 15  pop  z, f=11        stack = [w]
  step 16  pop  w, f=12        stack = [ ]

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

tree edges
  (u,v) (y,x) (v,y) (w,z) 
