use Iterator and Iterable