code: public List<Map<String, String>> produceNWise(int nWise, String[] coVariables, Map<String, String[]> variableDomains) {
          List<Set<String>> tuples = makeNWiseTuples(coVariables, nWise);
  
          List<Map<String, String>> testCases = new ArrayList<>();
          for (Set<String> tuple : tuples) {
              testCases.addAll(expandTupleIntoTestCases(tuple, variableDomains));
          }
  
          return testCases;
      }
docs: Finds all nWise combinations of a set of variables, each with a given domain of values
  
  @param nWise           the number of variables in each combination
  @param coVariables     the varisbles
  @param variableDomains the domains
  @return all nWise combinations of the set of variables