@Override
    public T nextImpl() {
      if (guide == null) return stop();
      while (last != null) {
        P<T, ?> top = last;
        Iterator<? extends T> it = top.iterator(tree);
        boolean hasNext = it.hasNext();
        curResult = null;
        if (top.node != null || hasNext) {
          curChild = hasNext ? it.next() : null;
          curParent = top.node;
          curChildren = top.itle;
          curNoChildren = top.empty;
          guide.guide(this);
        }
        if (!hasNext) {
          last = last.remove();
        }
        if (curResult != null) {
          return curResult;
        }
      }
      return stop();
    }
@Override
    public T nextImpl()