BFS from s
  init      enqueue s   Q = (s:0)
  step 1    dequeue s   Q = ( empty )
            discover w via s, d=1  Q = (w:1)
            discover r via s, d=1  Q = (w:1 r:1)
            s -> black
  step 2    dequeue w   Q = (r:1)
            skip s (already black)
            discover t via w, d=2  Q = (r:1 t:2)
            discover x via w, d=2  Q = (r:1 t:2 x:2)
            w -> black
  step 3    dequeue r   Q = (t:2 x:2)
            skip s (already black)
            discover v via r, d=2  Q = (t:2 x:2 v:2)
            r -> black
  step 4    dequeue t   Q = (x:2 v:2)
            discover u via t, d=3  Q = (x:2 v:2 u:3)
            skip w (already black)
            skip x (already gray )
            t -> black
  step 5    dequeue x   Q = (v:2 u:3)
            skip t (already black)
            skip w (already black)
            discover y via x, d=3  Q = (v:2 u:3 y:3)
            x -> black
  step 6    dequeue v   Q = (u:3 y:3)
            skip r (already black)
            v -> black
  step 7    dequeue u   Q = (y:3)
            skip t (already black)
            skip y (already gray )
            u -> black
  step 8    dequeue y   Q = ( empty )
            skip u (already black)
            skip x (already black)
            y -> black

result
  vertex :  r  s  t  u  v  w  x  y
  d      :  1  0  2  3  2  1  2  3
  pi     :  s  -  w  t  r  s  w  x

breadth-first tree edges (pi[v], v)
  (s,r) (w,t) (t,u) (r,v) (s,w) (w,x) (x,y) 

shortest paths read out of pi
  s to r (1 edge): sr
  s to s (0 edges): s
  s to t (2 edges): swt
  s to u (3 edges): swtu
  s to v (2 edges): srv
  s to w (1 edge): sw
  s to x (2 edges): swx
  s to y (3 edges): swxy
