Write shortest_path(graph, start, goal) returning the fewest hops between two nodes, or -1 when no route exists.
graph maps each node to a list of its neighbours. Edges have no weight, so breadth-first search finds the shortest route - the first time you reach a node is by the shortest way to it.
A node's distance to itself is 0.