class Clearer {
public:
    vector<vector<int> > clearZero(vector<vector<int> > mat, int n) {
        bool fr = any_of(mat[0].begin(), mat[0].end(), [](auto x) {return x==0;});
        bool fc = false;

        for (int i = 0; i < n; ++i) {
            if (mat[i][0] == 0) {
                fc = true;
                break;
            }
        }

        for (int i = 1; i < n; ++i) {
            for (int j = 1; j < n; ++j) {
                if (mat[i][j] == 0) mat[i][0] = mat[0][j] = 0;
            }
        }
        for (int i = 1; i < n; ++i) {
            for (int j = 1; j < n; ++j) {
                if (mat[i][0] == 0 || mat[0][j] == 0) mat[i][j] = 0;
            }
        }

        if (fr) fill(mat[0].begin(), mat[0].end(), 0);
        if (fc) for (int i = 0; i < n; ++i) mat[i][0] = 0;

        return mat;
    }
};