static Set<Move> track(Instance instance, PathStep[] steps) {
Set<Move> active = new HashSet<Move>();
Set<Move> next = new HashSet<Move>();
active.add(new Move("", instance));
for(PathStep step: steps) {
for(Move i: active) {
Iterator<Move> it = step.track(i.instance);
while(it.hasNext()) {
Move sub = it.next();
if (sub != null) {
next.add(new Move(i.pathSpec + sub.pathSpec, sub.instance));
}
}
}
// swap buffers
active.clear();