anchor.diff:    choices.add(_chunks(groups1, groups2, (sequence) => sequence.isEmpty)
         .map((chunk) => chunk.expand((group) => group))
         .toList());
  -  choices.addAll(finalCombinator);
  +  choices.addAll(finalCombinators);
   
     return paths(choices.where((choice) => choice.isNotEmpty))
         .map((path) => path.expand((group) => group).toList());
  
positive.code:     // is a supersequence of the other, use that, otherwise give up.
      var lcs = longestCommonSubsequence(combinators1, combinators2);
      if (listEquals(lcs, combinators1)) {
        result.addAll([new List.from(combinators2.reversed)]);
      } else if (listEquals(lcs, combinators2)) {
        result.addAll([new List.from(combinators1.reversed)]);
      }
      return result;
    }
  
negative.code:   });
  
    var choices = [
      <Iterable<ComplexSelectorComponent>>[initialCombinators]
    ];
    for (var group in lcs) {
      choices.add(_chunks/*<List<ComplexSelectorComponent>>*/(groups1, groups2,
  