#include using namespace std; #include using namespace atcoder; using ll=long long; using Graph=vector>; #define MAX 60 #define MOD 1000000007 #define INF 1000000000000000000 vector parent; int find(int x){ int y=parent[x]; if(y!=parent[y]){ y=find(y); } return parent[x]=y; } void unite(int a,int b){ int x=find(a); int y=find(b); if(x!=y){ parent[y]=x; } } int main(){ int H,W,N; cin>>H>>W>>N; vector> C(H,vector(W)); for(int i=0;i>C[i][j]; } } parent.resize(H*W); iota(parent.begin(),parent.end(),0); for(int i=0;i cnt(H*W,0); for(int i=0;iC[i][j+1]){ G[find(i*W+(j+1))].push_back(find(i*W+j)); cnt[find(i*W+j)]++; } } } for(int i=0;iC[i+1][j]){ G[find((i+1)*W+j)].push_back(find(i*W+j)); cnt[find(i*W+j)]++; } } } vector length(H*W,0); queue q; for(int i=0;i