code: private void setupBranchingEnumerators() {
          //Getting required sequence of differences (mutations)
          final byte[] bSequence = branchingSequences[branchingSequenceIndex];
  
          //Ensure number of branching enumerators
          ensureCapacity(bSequence.length);
  
          //Setting up initial branching enumerators
          byte previous = -1, current;
  
          for (int i = 0; i < bSequence.length; ++i) {
              current = bSequence[i];
  
              boolean autoMove1 = (previous == 1 && current == 2); // prevents insertion right after deletion
  
              if (parameters.isGreedy()) {
                  // prevent some other 'redundant' cases
                  autoMove1 = autoMove1 || (previous == 2 && current == 1) || // prevents deletion right after insertion
                          (previous == 2 && current == 0); // prevents mismatch right after insertion
              }
  
              branchingEnumerators[i].setup(current, autoMove1);
  
              previous = bSequence[i];
          }
  
          branchingEnumerators[0].reset(0, root);
  
          lastEnumerator = bSequence.length - 1;
      }
docs: Setts up BranchingEnumerators for current branching sequence