code: function collectAndCombineOperation(node) {
    let substeps = [];
  
    const status = LikeTermCollector.collectLikeTerms(clone(node));
    if (!status.hasChanged()) {
      return status;
    }
  
    // STEP 1: collect like terms, e.g. 2x + 4x^2 + 5x => 4x^2 + (2x + 5x)
    substeps.push(status);
    let newNode = Node.Status.resetChangeGroups(status.newNode);
  
    // STEP 2 onwards: combine like terms for each group that can be combined
    // e.g. (x + 3x) + (2 + 2) has two groups
    const combineSteps = combineLikeTerms(newNode);
    if (combineSteps.length > 0) {
      substeps = substeps.concat(combineSteps);
      const lastStep = combineSteps[combineSteps.length - 1];
      newNode = Node.Status.resetChangeGroups(lastStep.newNode);
    }
  
    return Node.Status.nodeChanged(
      ChangeTypes.COLLECT_AND_COMBINE_LIKE_TERMS,
      node, newNode, true, substeps);
  }
docs: Collects and combines (if possible) the arguments of an addition or multiplication