private void _combine(ArrayList<ArrayList<Integer>> results, 
                     int[] solution,
                     int n, int k, int index, int start) 
    {
        if (n - start < k - 1 - index) {
            return;
        }
        
        if (index == k) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            for (int i: solution) {
                list.add(i);
            }
            results.add(list);
            return;
        }
        
        for (int i = start; i <= n; i++) {
            solution[index] = i;
            _combine(results, solution, n, k, index+1, i+1);
        }
    }