code: def _bfs_path_states(self, graph, start):
          
          pathstates = {}
          # maintain a queue of paths
          queue = []
          visited = []
          # push the first path into the queue
          queue.append([['', start]])
          while queue:
              # get the first path from the queue
              path = queue.pop(0)
              # get the last node from the path
              node = path[-1][1]
              # path found """
              if node.stateid not in pathstates and node.stateid != len(list(graph.states)):
                  pathstates[node.stateid] = ''.join(
                      [mnode[0] for mnode in path])
              visited.append(node.stateid)
              # enumerate all adjacent nodes, construct a new path and push it
              # into the queue
              for arc in node.arcs:
                  char = graph.isyms.find(arc.ilabel)
                  next_state = graph[arc.nextstate]
                  if next_state.stateid not in visited:
                      new_path = list(path)
                      new_path.append([char, next_state])
                      queue.append(new_path)
          return pathstates
docs: Find state access strings (DFA shortest paths for every state)
          using BFS
          Args:
              graph (DFA): The DFA states
              start (int): The DFA initial state
          Return:
              list: A list of all the DFA shortest paths for every state