Our Mathematical Selection code in Java.
Mathematical Selection Class File:
package miscellaneous;
import java.util.ArrayList;
import java.util.List;
public class Selection {
    public String[] words;
    public int r; // min length of word
    protected List<String[]> complete_group;
    private int i;
    public Selection() {
    }
    public List<String[]> groupSelection(String[] candidates, int size) {
        words = candidates;
        r = size;
        complete_group = new ArrayList<>();
        i = 0;
        recursiveFillUp(new ArrayList<>());
        return complete_group;
    }
// pick elements recursively
    protected void recursiveFillUp(List<String> temp) {
        List<String>[] picked_elements = new List[words.length];
        int j = i;
        while (j < words.length) {
            picked_elements[j] = new ArrayList<>();
            picked_elements[j].addAll(temp);
            picked_elements[j].add(words[j]);
            // recoil factor
            if (i >= words.length) {
                i = j;
            }
            // satisfied yet?
            if (picked_elements[j].size() == r) {
                complete_group.add(picked_elements[j].toArray(new String[0]));
            } else if (picked_elements[j].size() < r) {
                recursiveFillUp(picked_elements[j]);
            }
            j++;
        }
        if (picked_elements[--j] != null && picked_elements[j].size() == r) {
            i++; // keep recoil factor straightened out
        }
    }
}Main Class:
package miscellaneous;
import java.util.Arrays;
import java.util.List;
public class Miscellaneous {
    public static void main(String[] args) {
        String[] goods = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        Selection pick = new Selection();
        List<String[]> result = pick.groupSelection(goods, 3);
        System.out.println(Arrays.toString(pick.words) + " selection " + pick.r + ":\n");
        int i = 0;
        for (String[] set : result) {
            System.out.println(++i + ": " + Arrays.toString(set) + ";");
        }
        System.out.println("\nNumber of ways is " + result.size() + ".");
    }
}Try it out!
                            
                                
                                
                                
                                Elegance (0.0)
                                
                                
                                
                            
                        
                
        
            
            
        