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

def _bfs_path_states(self, graph, start):
        """
        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
        """
        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