#include #include using namespace atcoder; using namespace std; int main(){ int h,w; cin>>h>>w; int m=h*w; vector a(m); vector> b(m+1); vector> next(m); vector dx={1,0,-1,0},dy={0,1,0,-1}; for(int i=0;i=h||ny<0||ny>=w)continue; next[i*w+j].push_back(nx*w+ny); } } for(int i=0;i>a[i*w+j]; for(int i=0;i>q; vector> lr(q); for(int i=0;i> qs(q,vector(4)); for(int i=0;i>qs[i][j]; qs[i][j]--; } } while(1){ bool end=true; for(int i=0;i> s(m+1); for(int i=0;i state(m,false); for(int i=0;i<=m;i++){ for(int x:b[i]){ state[x]=true; for(int y:next[x]){ if(state[y])uf.merge(x,y); } } for(int x:s[i]){ if(uf.same(qs[x][0]*w+qs[x][1],qs[x][2]*w+qs[x][3]))lr[x][1]=i; else lr[x][0]=i; } } } for(int i=0;i