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 y,int x){ return s[y][x]=='.'&&dp1[y][x]>=0; } void f4e(){ for(int y=0;y=2){ f4e(); return d*4; } if(a==0){ f4e(); return 30000000; } y+=a2-a1; x+=a4-a3; dp1[y][x]=-2; 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==30000000){ puts("-1"); exit(0); } printf("%d",d1+d2); }