static ItIt> outerProduct(L> lists) { L> lists2 = dropFirst(lists); ret nestedIterator(lA, func(A a) -> Iterator> { mapI(outerProduct(lists2), l -> itemPlusList(a, l)) }); }