static L> combineZigZag(L l1, L l2) { int lA = l(l1), lB = l(l2), maxSum = lA+lB-1; L> out = new L; for sum to maxSum: { int maxA = min(lA, sum); for iA to maxA: out.add(pair(l1.get(iA), l2.get(sum-iA))); } ret out; }