import sys input = sys.stdin.readline from collections import deque # x以下の素数の列挙,素因数分解,約数の列挙 x=200000 L=round(x**(1/2)) Primelist=[i for i in range(x+1)] Primelist[1]=0 # 1は素数でないので0にする. for i in Primelist: if i>L: break if i==0: continue for j in range(2*i,x+1,i): Primelist[j]=0 Primes=[Primelist[j] for j in range(x+1) if Primelist[j]!=0] SET=set(Primes) H,W=map(int,input().split()) sx,sy=map(int,input().split()) gx,gy=map(int,input().split()) sx-=1 sy-=1 gx-=1 gy-=1 MAP=[input().strip() for i in range(H)] c=200 DP=[[[[1<<30]*W for i in range(H)] for j in range(c)] for k in range(c)] Q=deque() Q.append((0,0,sx,sy)) DP[0][0][sx][sy]=0 while Q: #print(Q) left,down,x,y=Q.popleft() now=DP[left][down][x][y] if x-1>=0 and left+1now+1: DP[left+1][down][x-1][y]=now+1 Q.append((left+1,down,x-1,y)) if y-1>=0 and down+1now+1: DP[left][down+1][x][y-1]=now+1 Q.append((left,down+1,x,y-1)) if x+1now+1: DP[left][down][x+1][y]=now+1 Q.append((left,down,x+1,y)) if y+1now+1: DP[left][down][x][y+1]=now+1 Q.append((left,down,x,y+1)) ANS=1<<30 for i in range(c): for j in range(c): count=DP[i][j][gx][gy] if count>=1<<29: continue left=i down=j right=(gx-sx)+left up=(gy-sy)+down #print(left,down,right,up,count) if left in SET and down in SET and right in SET and up in SET: ANS=min(ANS,count) if ANS>10**9: print(-1) else: print(ANS)