added itertools