def findPath(g, a, b):
  """
  Finds a path in the graph g from the vertex a
  to the vertex b if one exists.  No conditions
  (shortest distance or weighted path) are placed
  on the resulting path.  Returns None if no such
  path exists
  """
  #maps verticies to strings for their status
  # including "unvisited", "visited", "processed"
  status = {x:"unvisited" for x in g.nodes}
  s = [] # my stack: append or pop
  s.append(a)
  status[a] = "visited"
  while len(s) > 0:
    curr = s[-1]
    # check if you've found b:
    if curr == b:
      return s
    # select the next vertex to visit...
    next = None
    #print("curr = " + str(curr))
    for y in g.neighbors(curr):
      if status[y] == "unvisited":
        next = y
        break
    if next is None:
      #done with curr, need to backtrack
      s.pop()
      status[curr] = "processed"
    else:
      # go to the *next* vertex:
      status[next] = "visited"
      s.append(next)
  return None