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