itertools.product is partially lazy because it evaluates the argument eagerly:
Before product() runs, it completely consumes the input itera
product()