#include #include #include #include using namespace std; using namespace atcoder; using namespace __gnu_pbds; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using pll=pair; // using mint=modint; // template // using ordered_map=tree,rb_tree_tag,tree_order_statistics_node_update>; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll W,H; cin>>W>>H; vectorg(H); for(int i=0;i>g[i]; ll sy=-1,sx=-1; for(int y=0;yq; dist[sy][sx]=0; q.push_back({sy,sx}); ll dy[4]={1,-1,0,0}; ll dx[4]={0,0,1,-1}; while(!q.empty()){ auto [y,x]=q.front(); q.pop_front(); for(int dir=0;dir<4;++dir){ ll ny=y+dy[dir],nx=x+dx[dir]; if(ny<0||ny>=H||nx<0||nx>=W)continue; ll cost=(g[ny][nx]=='#'); if(dist[ny][nx]>dist[y][x]+cost){ dist[ny][nx]=dist[y][x]+cost; if(cost==0)q.push_front({ny,nx}); else q.push_back({ny,nx}); } } } ll ans=LLONG_MAX; for(int y=0;y0){ ans=min(ans,dist[y][x]); } } } cout<