// Because of the representation chosen, iterating over the neighbors of a vertex means iterating over a set, which is tricky in Dafny. For reference, such a
// loop should look like:
// var neighbors := graph[vertex];
// var neighbors := graph[vertex]; // track the neighbors that we still need to loop over
// while |neighbors| > 0 {
// var neighbor :| neighbor in neighbors; // this line means "choose any one neighbor from the neighbors set"
// neighbors := neighbors - {neighbor};
// // [so something with neighbor]
// var neighbor :| neighbor in neighbors; // choose any one neighbor from the neighbors set
// neighbors := neighbors - {neighbor}; // remove that neighbor from the set
// // [do something with the neighbor]
// }
// We represent a path in a graph as a nonempty sequence of vertices. Again, not all sequences are valid paths. For example, in the graph {A: {B}, B: {}}, the