G = {
    'A' : ['B','D','E'] ,
    'B' : ['A','C'] ,
    'C' : ['B','D'] ,
    'D' : ['A','C','E'] ,
    'E' : ['A','D','G','F'] ,
    'F' : ['E','G'] ,
    'G' : ['E','F','H'] ,
    'H' : ['G']
}

start, end = 'A','H'

pile = []
pile.append((start, [start]))

while pile:
    (S, path) = pile.pop()
    list_nodes = [n for n in G[S] if n not in path]
    for i in list_nodes:
        if i == end:
            print(path + [i])
        else:
            pile.append((i, path + [i]))

