use iterable input interface