Link to this code: https://cses.fi/paste/49d6b85531098f5dc3a858/
# include <bits/stdc++.h>
using namespace std;
// # define int long long

int dr[4] = {-1, 0, 1, 0};
int dc[4] = {0, -1, 0, 1};

int R, C;
int grid[1010][1010], vis[1010][1010];

bool notValid(int r, int c) {
    return r < 0 || c < 0 || r == R || c == C || vis[r][c] || grid[r][c];
}

void dfs(int r, int c) {
    if(notValid(r, c)) return;
    vis[r][c] = 1;
    for (int i = 0 ; i < 4 ; ++i) {
        dfs(r + dr[i], c + dc[i]);
    }
}

void solve() {
    char x;
    cin >> R >> C;
    for (int r = 0 ; r < R ; ++r) {
        for (int c = 0 ; c < C ; ++c) {
            cin >> x;
            grid[r][c] = x == '#';
        }
    }
    int cnt = 0;
    for (int r = 0 ; r < R ; ++r) {
        for (int c = 0 ; c < C ; ++c) {
            if (notValid(r, c)) continue;
            dfs(r, c);
            ++cnt;
        }
    }
    cout << cnt << "\n";
}

signed main() {
    solve();
    return 0;
}