code: def combine(items, k=None):
      
      length_items = len(items)
      lengths = [len(i) for i in items]
      length = reduce(lambda x, y: x * y, lengths)
      repeats = [reduce(lambda x, y: x * y, lengths[i:])
                 for i in range(1, length_items)] + [1]
      if k is not None:
          k = k % length
          # Python division by default is integer division (~ floor(a/b))
          indices = [old_div((k % (lengths[i] * repeats[i])), repeats[i])
                     for i in range(length_items)]
          return [items[i][indices[i]] for i in range(length_items)]
      else:
          matrix = []
          for i, item in enumerate(items):
              row = []
              for subset in item:
                  row.extend([subset] * repeats[i])
              times = old_div(length, len(row))
              matrix.append(row * times)
          # Transpose the matrix or return the columns instead rows
          return list(zip(*matrix))
docs: Create a matrix in wich each row is a tuple containing one of solutions or
      solution k-esima.