#include <map>
#include <vector>

class Solution {
  public:
    std::vector<std::vector<int>> findMatrix(const std::vector<int> &nums) {
        // count the numbers
        std::map<int, int> freqs;
        for (auto x : nums) {
            ++freqs[x];
        }

        std::vector<std::vector<int>> matrix;

        bool elements_left = true;
        while (elements_left) {
            elements_left = false;

            std::vector<int> row;
            for (auto &[num, count] : freqs) {
                if (count <= 0) {
                    continue;
                }

                --count;
                row.push_back(num);
                elements_left = elements_left || count > 0;
            }
            matrix.push_back(row);
        }

        return matrix;
    }
};