#include using namespace std; int main(){ int inf=1e9; vector dy={0,1,0,-1},dx={1,0,-1,0}; int h,w; cin>>h>>w; vector s(h); int si,sj,gi,gj; for (int i=0;i>s[i]; for (int j=0;j> q; vector> dist(h,vector(w,inf)); dist[a][b]=0; q.push({a,b}); while (!q.empty()){ auto [i,j]=q.front(); q.pop(); for (int k=0;k<4;k++){ int ni=i+dy[k],nj=j+dx[k]; if (!(0<=ni&&ni d1,vector d2){ int m1=*min_element(d1.begin(),d1.end()),m2=*min_element(d2.begin(),d2.end()); return m1+m2<=abs(si-gi)+abs(sj-gj)-1; }; for (int i=min(si,gi);i d1,d2; for (int j=0;jgj) swap(d1,d2); if (check2(d1,d2)) ans=abs(si-gi)+abs(sj-gj)+1; } for (int j=min(sj,gj);j d1,d2; for (int i=0;igi) swap(d1,d2); if (check2(d1,d2)) ans=abs(si-gi)+abs(sj-gj)+1; } ans=min(ans,ds[gi][gj]); cout<