#include<stdcpp.h>
using namespace std;
class Solution{
    public:
    vector<vector<int> > findMatrix(vector<int>& nums){
        sort(nums.begin(),nums.end(),greater<int>());
        int max_cate = 1;
        int cate = 1;
        for(int i = 1 ; i < nums.size();i++){
            if(nums[i]==nums[i-1])
                cate++;
            else{
                max_cate = max(max_cate,cate);
                cate = 1;
            }
        }
        max_cate = max(max_cate,cate);
        vector<vector<int> > rlt(max_cate);
        int cnt = 0;
        while(cnt < nums.size() - 1){
            int cnt_in = 0;
            rlt[cnt_in++].push_back(nums[cnt++]);
            while(cnt<nums.size() - 1&&nums[cnt]==nums[cnt-1]){
                rlt[cnt_in++].push_back(nums[cnt++]);
            }
        }
        for(int i = 0 ; i < rlt.size() ;i++){
            int end = rlt[i].size() - 1;
            if(rlt[i].size() == 0||rlt[i][end]!=nums[nums.size()-1]) {
                rlt[i].push_back(nums[nums.size() - 1]);
                break;
            }
        }
        return rlt;
    }
};
int main(){
    Solution sol;
    cout<<"ex1"<<endl;
    vector<int> ex1_nums = {1,3,4,1,2,3,1};
    vector<vector<int> >rlt1 = sol.findMatrix(ex1_nums);
    for(int i = 0 ; i < rlt1.size();i++){
        for(int j = 0 ; j <rlt1[i].size();j++){
            cout<<rlt1[i][j]<<' ';
        }
        cout<<endl;
    }
    cout<<endl;
    cout<<"ex2"<<endl;
    vector<int> ex2_nums = {4,4,3};
    vector<vector<int> >rlt2 = sol.findMatrix(ex2_nums);
    for(int i = 0 ; i < rlt2.size();i++){
        for(int j = 0 ; j <rlt2[i].size();j++){
            cout<<rlt2[i][j]<<' ';
        }
        cout<<endl;
    }

}