@Override
    public T nextImpl() {
      while (last != null) {
        P1<T> top = last;
        if (top.iterator(tree).hasNext() && !top.empty) {
          T child = top.iterator(tree).next();
          last = last.add(P1.create(child));
        }
        else {
          last = last.remove();
          if (top.empty) return last == null ? stop() : top.node;
        }
      }
      return stop();
    }
@Override
    public T nextImpl()