code: @Override
      public void solve(DefaultSolverScope<Solution_> solverScope) {
          SortedSet<ExhaustiveSearchNode> expandableNodeQueue = new TreeSet<>(nodeComparator);
          ExhaustiveSearchPhaseScope<Solution_> phaseScope = new ExhaustiveSearchPhaseScope<>(solverScope);
          phaseScope.setExpandableNodeQueue(expandableNodeQueue);
          phaseStarted(phaseScope);
  
          while (!expandableNodeQueue.isEmpty() && !termination.isPhaseTerminated(phaseScope)) {
              ExhaustiveSearchStepScope<Solution_> stepScope = new ExhaustiveSearchStepScope<>(phaseScope);
              ExhaustiveSearchNode node = expandableNodeQueue.last();
              expandableNodeQueue.remove(node);
              stepScope.setExpandingNode(node);
              stepStarted(stepScope);
              restoreWorkingSolution(stepScope);
              decider.expandNode(stepScope);
              stepEnded(stepScope);
              phaseScope.setLastCompletedStepScope(stepScope);
          }
          phaseEnded(phaseScope);
      }
docs: ************************************************************************