code: private static void proposeSolutions(String[] dataSet, int k, int startPosition, String[] result, WebLocator webLocator) throws SolutionFoundException {
  
          if (k == 0) {
              validateSolution(webLocator, differences(dataSet, result));
              return;
          }
  
          for (int i = startPosition; i <= dataSet.length - k; i++) {
              result[result.length - k] = dataSet[i];
              proposeSolutions(dataSet, k - 1, i + 1, result, webLocator);
          }
      }
docs: Generates combinations of all objects from the dataSet taken k at a time.
  Each combination is a possible solution that must be validated.