Shortest path

May make a few updates if we have time, but calling this good for now.
You may want to raise an exception here, rather than returning a string.