code: public List<int[]> split(int depth) {
      int[] choices = new int[depth];
      List<int[]> result = new ArrayList<int[]>(100000);
      searchPrefixes(depth, choices, result);
      return result;
    }
docs: Generate a list of row choices to cover the first moves.
  @param depth the length of the prefixes to generate
  @return a list of integer arrays that list the rows to pick in order