@Override
    public T nextImpl() {
      if (top != null) {
        for (T t : top.iterable(tree)) {
          if (paths.containsKey(t)) continue;
          queue.add(ourNotNullizer.notNullize(t));
          paths.put(t, top.node);
        }
        top = null;
      }
      if (queue.isEmpty()) return stop();
      top = P1.create(ourNotNullizer.nullize(queue.remove()));
      return top.node;
    }
@Override
    public T nextImpl()