An algorithm that splits choices into two groups, enumerates partial results for each group, and matches compatible results. For n binary choices, the two lists each have about 2n/2 entries instead of enumerating 2n complete choices; the matching cost and memory requirements depend on the problem.