code: def get_next(self, tag="<"):
          
          next, ntag = None, None
  
          L = self.outs if tag == "<" else self.ins
  
          if len(L) == 1:
              e, = L
              if e.v1.v == self.v:
                  next, ntag = e.v2, e.o2
                  ntag = "<" if ntag == ">" else ">"  # Flip tag if on other end
              else:
                  next, ntag = e.v1, e.o1
  
          if next:  # Validate the next vertex
              B = next.ins if ntag == "<" else next.outs
              if len(B) > 1:
                  return None, None
  
          return next, ntag
docs: This function is tricky and took me a while to figure out.
  
          The tag specifies the direction where the current edge came from.
  
           tag     ntag
          ---> V >----> U
               cur      next
  
          This means the next vertex should follow the outs since this tag is
          inward '<'. Check if there are multiple branches if len(L) == 1, and
          also check if the next it finds has multiple incoming edges though if
          len(B) == 1.