int h,w,ra,ca,rb,cb; char s[1333][1335]; int dp1[1333][1333]; int dp2[1333][1333][2]; struct{int y,x,z,d} q[16000000]; int qr,qw; void enq(int y,int x,int z,int d){ q[qw].y=y; q[qw].x=x; q[qw].z=z; q[qw].d=d; ++qw; } void f1(){ qr=qw=0; enq(ra,ca,0,1); while(qr=0){ enq(y,x,1,d+1); } enq(y-1,x,z,d+1); enq(y+1,x,z,d+1); enq(y,x-1,z,d+1); enq(y,x+1,z,d+1); } } } int f4a(int r,int c){ return s[r][c]=='.'&&dp1[r][c]>=0; } int f4(int r,int c){ int d=1; while(1){ dp1[r][c]=-1; int a=f4a(r-1,c)+f4a(r+1,c)+f4a(r,c-1)+f4a(r,c+1); if(a>=2){ return d*4; } if(a==0){ return 3000000; } r+=f4a(r+1,c)-f4a(r-1,c); c+=f4a(r,c+1)-f4a(r,c-1); d+=1; } } main(){ scanf("%d%d%d%d%d%d",&h,&w,&ra,&ca,&rb,&cb); --ra;--ca;--rb;--cb; for(int y=0;yd) d2=d; d=f4(rb,cb)+d1; if(d2>d) d2=d; if(d2==3000000){ puts("-1"); exit(0); } printf("%d",d1+d2); }