code: def cross_lists(*sets):
      
      wheels = [iter(_) for _ in sets]
      digits = [next(it) for it in wheels]
      while True:
          yield digits[:]
          for i in range(len(digits)-1, -1, -1):
              try:
                  digits[i] = next(wheels[i])
                  break
              except StopIteration:
                  wheels[i] = iter(sets[i])
                  digits[i] = next(wheels[i])
          else:
              break
docs: Return the cross product of the arguments