#include #include #include using namespace std ; vector> ah, av, seen, as ; vector row, cnts ; int cookie ; vector b ; int main(int argc, char *argv[]) { int w, h, m ; cin >> h >> w >> m ; b.resize(h) ; ah.resize(h+1) ; av.resize(h+1) ; seen.resize(h) ; as.resize(h+1) ; row.resize(w+1) ; cnts.resize(h+1) ; for (int i=0; i> x >> y ; b[x-1][y-1] = '#' ; } for (int i=h-1; i>=0; i--) for (int j=w-1; j>=0; j--) if (b[i][j] == '.') ah[i][j] = 1 + ah[i][j+1] ; for (int j=w-1; j>=0; j--) for (int i=h-1; i>=0; i--) if (b[i][j] == '.') av[i][j] = 1 + av[i+1][j] ; int hi = 0 ; for (int i=h-1; i>=0; i--) { for (int j=w-1; j>=0; j--) { as[i][j] = min(as[i+1][j+1]+1, min(ah[i][j], av[i][j])) ; hi = max(hi, as[i][j]) ; cnts[as[i][j]]++ ; } } for (int i=hi-1; i>=0; i--) cnts[i] += cnts[i+1] ; int lo = 0 ; int bit = 1 ; while (bit <= hi) bit <<= 1 ; for (; bit; bit>>=1) { int t = bit + lo ; if (t > hi) continue ; cookie++ ; vector> q ; for (int i=0; q.size() == 0; i++) for (int j=0; q.size() == 0 && j= t) q.push_back({i,j}) ; seen[q[0].first][q[0].second] = cookie ; for (int qg=0; qg<(int)q.size(); qg++) { auto [i,j] = q[qg] ; if (i>0 && as[i-1][j] >= t && seen[i-1][j] != cookie) { q.push_back({i-1,j}) ; seen[i-1][j] = cookie ; } if (i+1= t && seen[i+1][j] != cookie) { q.push_back({i+1,j}) ; seen[i+1][j] = cookie ; } if (j>0 && as[i][j-1] >= t && seen[i][j-1] != cookie) { q.push_back({i,j-1}) ; seen[i][j-1] = cookie ; } if (j+1= t && seen[i][j+1] != cookie) { q.push_back({i,j+1}) ; seen[i][j+1] = cookie ; } } if (cnts[t] != (int)q.size()) continue ; for (int j=0; j= t) { sf = max(j, sf) ; while (sf < j+t) row[sf++] = t ; } } for (int j=0; good==1 && j