static void choose(int current){
        if(chosen.size()==chosenN){
            boolean[] selected = new boolean[n-1];
            for(int i=0; i<chosenN; i++) selected[chosen.get(i)] = true;
            cols = new int[n][chosenN+1];
            for(int i=0; i<n; i++){
                int sum = 0;
                int block = 0;
                for(int j=0; j<n; j++){
                    sum+=a[i][j];
                    if((j<n-1 && selected[j]) || j==n-1){
                        cols[i][block] = sum;
                        sum=0;
                        block++;
                    }
                }
            }
            int min = findBest();
            if(result>min) result = min;
            return;
        }
        if(n-1-current<chosenN-chosen.size()) return;
        chosen.add(current);
        choose(current+1);
        chosen.remove(chosen.size()-1);
        choose(current+1);
    }