docs: private void generatePermutations(
        ArrayList<HashMap<String, String[]>[]> result, int index,
        HashMap<String, String[]>[][] subResult) {
      int localIndex = index;
      HashMap<String, String[]>[] value = subResult[localIndex];
      if (localIndex == 0) {
        for (int i = 0; i < value.length; i++) {
          HashMap<String, String[]>[] resultItem = new HashMap[subResult.length];
          resultItem[localIndex] = value[i];
          result.add(resultItem);
        }
      } else {
        ArrayList<HashMap<String, String[]>[]> newResult = new ArrayList<>();
        for (int e = 0; e < result.size(); e++) {
          for (int i = 0; i < value.length; i++) {
            HashMap<String, String[]>[] resultItem = result.get(e);
            resultItem[localIndex] = value[i];
            newResult.add(resultItem);
          }
        }
        result.clear();
        result.addAll(newResult);
      }
      localIndex++;
      if (localIndex < subResult.length) {
        generatePermutations(result, localIndex, subResult);
      }
    }