#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; using mint=modint998244353; int h, w; int sy, sx, gy, gx; string s[1010]; int d[6][1010][1010]; int main() { cin>>h>>w; cin>>sy>>sx; cin>>gy>>gx; sy--; sx--; gy--; gx--; for(int i=0; i>s[i]; } const int INF=1e9; for(int i=0; i; queue que; que.push({{sy, sx}, 0}); int dy[4]={1, -1, 0, 0}, dx[4]={0, 0, 1, -1}; vector> v{{2,3,4,5},{3,2,5,4},{1,0,2,2},{0,1,3,3},{4,4,1,0},{5,5,0,1}}; while(!que.empty()){ auto p=que.front(); que.pop(); int t=p.second; int y=p.first.first, x=p.first.second; for(int k=0; k<4; k++){ int y1=y+dy[k], x1=x+dx[k]; if(y1<0 || y1>=h || x1<0 || x1>=w || s[y1][x1]=='#') continue; int t1=v[t][k]; if(d[t1][y1][x1]>d[t][y][x]+1){ d[t1][y1][x1]=d[t][y][x]+1; que.push({{y1, x1}, t1}); } } } if(d[0][gy][gx]==INF) cout<<-1<