public:
vector<vector<char> > grid;
bool BFS(int i,int j)
{
if(grid[i][j]=='0')
return false;
queue<pair<int,int> > Q;
Q.push({i,j});
while(!Q.empty())
{
auto tmp = Q.front();
Q.pop();
int x = tmp.first;
int y = tmp.second;
//BFS(x,y);
grid[x][y]='0';
if(x+1<=H-1&&grid[x+1][y]=='1')
Q.push({x+1,y});
if(x-1>=0&&grid[x-1][y]=='1')
Q.push({x-1,y});
if(y+1<=W-1&&grid[x][y+1]=='1')
Q.push({x,y+1});
if(y-1>=0&&grid[x][y-1]=='1')
Q.push({x,y-1});
}
return true;
}
int H;
int W;
int solve(vector<vector<char> >& grid_) {
grid = grid_;
H = grid.size();
W = grid[0].size();
int res = 0;
for(int i=0;i<H;i++)
for(int j=0;j<W;j++)
if(BFS(i,j)) res++;
return res;
}
};