class Solution {
public:
    int res = 0;

    void find(vector<vector<char> >& grid, int i, int j, int m, int n) {
        int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};
        grid[i][j] = '0';
        for(int k = 0; k < 4; k ++) {
            int x = i + dx[k], y = j + dy[k];
            if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1') {
                find(grid, x, y, m ,n);
            }
        }
    }

    int solve(vector<vector<char> >& grid) {
        int m = grid.size(), n = grid[0].size();
        for(int i = 0; i < m; i ++) {
            for(int j = 0; j < n ; j ++) {
                if(grid[i][j] == '1') {
                    res ++;
                    find(grid, i , j, m, n);
                }
            }
        }
        return res;
    }
};