procedure successors(graph,nodes) local snodes snodes := '' # start with none graph ? repeat { if tab(any(nodes)) then snodes ++:= move(1) else move(2) | break # exit at end of string } return snodes end procedure closure(graph,nodes) local snodes snodes := nodes # start with given nodes while snodes ~=== (nodes ++:= successors(graph,nodes)) do snodes := nodes # update if change return nodes end