def dfs_paths(graph, start, goal, path=list()):
if not path:
path.append(start)
if start == goal:
yield path
for vertex in graph[start] - set(path):
yield from dfs_paths(graph, vertex, goal, path=path + [vertex])
graph = {
'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E']),
}
print(repr([path for path in dfs_paths(graph, 'A', 'F')]))
print(repr([path for path in dfs_paths(graph, 'A', 'F')]))
print(repr([path for path in dfs_paths(graph, 'F', 'A')]))
print(repr([path for path in dfs_paths(graph, 'F', 'A')]))
print()
print(repr([path for path in dfs_paths(graph, 'A', 'F', [])]))
print(repr([path for path in dfs_paths(graph, 'A', 'F', [])]))
print(repr([path for path in dfs_paths(graph, 'F', 'A', [])]))
print(repr([path for path in dfs_paths(graph, 'F', 'A', [])]))
ZGVmIGRmc19wYXRocyhncmFwaCwgc3RhcnQsIGdvYWwsIHBhdGg9bGlzdCgpKToKICAgIGlmIG5vdCBwYXRoOgogICAgICAgIHBhdGguYXBwZW5kKHN0YXJ0KQogICAgaWYgc3RhcnQgPT0gZ29hbDoKICAgICAgICB5aWVsZCBwYXRoCiAgICBmb3IgdmVydGV4IGluIGdyYXBoW3N0YXJ0XSAtIHNldChwYXRoKToKICAgICAgICB5aWVsZCBmcm9tIGRmc19wYXRocyhncmFwaCwgdmVydGV4LCBnb2FsLCBwYXRoPXBhdGggKyBbdmVydGV4XSkKZ3JhcGggPSB7CiAgICAnQSc6IHNldChbJ0InLCAnQyddKSwKICAgICdCJzogc2V0KFsnQScsICdEJywgJ0UnXSksCiAgICAnQyc6IHNldChbJ0EnLCAnRiddKSwKICAgICdEJzogc2V0KFsnQiddKSwKICAgICdFJzogc2V0KFsnQicsICdGJ10pLAogICAgJ0YnOiBzZXQoWydDJywgJ0UnXSksCn0KcHJpbnQocmVwcihbcGF0aCBmb3IgcGF0aCBpbiBkZnNfcGF0aHMoZ3JhcGgsICdBJywgJ0YnKV0pKQpwcmludChyZXByKFtwYXRoIGZvciBwYXRoIGluIGRmc19wYXRocyhncmFwaCwgJ0EnLCAnRicpXSkpCnByaW50KHJlcHIoW3BhdGggZm9yIHBhdGggaW4gZGZzX3BhdGhzKGdyYXBoLCAnRicsICdBJyldKSkKcHJpbnQocmVwcihbcGF0aCBmb3IgcGF0aCBpbiBkZnNfcGF0aHMoZ3JhcGgsICdGJywgJ0EnKV0pKQpwcmludCgpCnByaW50KHJlcHIoW3BhdGggZm9yIHBhdGggaW4gZGZzX3BhdGhzKGdyYXBoLCAnQScsICdGJywgW10pXSkpCnByaW50KHJlcHIoW3BhdGggZm9yIHBhdGggaW4gZGZzX3BhdGhzKGdyYXBoLCAnQScsICdGJywgW10pXSkpCnByaW50KHJlcHIoW3BhdGggZm9yIHBhdGggaW4gZGZzX3BhdGhzKGdyYXBoLCAnRicsICdBJywgW10pXSkpCnByaW50KHJlcHIoW3BhdGggZm9yIHBhdGggaW4gZGZzX3BhdGhzKGdyYXBoLCAnRicsICdBJywgW10pXSkpCg==
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[]
[]
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['A', 'B', 'E', 'F'], ['A', 'C', 'F']]
[['F', 'E', 'B', 'A'], ['F', 'C', 'A']]
[['F', 'E', 'B', 'A'], ['F', 'C', 'A']]