from collections import deque
def min_moves_to_destination(M, N, grid, source, dest, move_rule):
# Define directions based on the move rule
dx, dy = move_rule
directions = [
(dx, dy), # forward
(dy, -dx), # right (90° clockwise)
(-dy, dx), # left (90° counterclockwise)
(-dx, -dy) # backward (180°)
]
visited = [[False] * N for _ in range(M)]
sx, sy = source
dx, dy = dest
# Early exit if source or destination is blocked
if not (0 <= sx < M and 0 <= sy < N and 0 <= dx < M and 0 <= dy < N):
return -1
if grid[sx][sy] == 1 or grid[dx][dy] == 1:
return -1
# BFS queue
queue = deque()
queue.append((sx, sy, 0))
visited[sx][sy] = True
while queue:
x, y, steps = queue.popleft()
if (x, y) == (dx, dy):
return steps
for mx, my in directions:
nx, ny = x + mx, y + my
if 0 <= nx < M and 0 <= ny < N and not visited[nx][ny] and grid[nx][ny] == 0:
visited[nx][ny] = True
queue.append((nx, ny, steps + 1))
return -1 # Not reachable
# Input reading
def main():
try:
M, N = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(M)]
source = tuple(map(int, input().split()))
dest = tuple(map(int, input().split()))
move_rule = tuple(map(int, input().split()))
result = min_moves_to_destination(M, N, grid, source, dest, move_rule)
print(result)
except Exception as e:
print("Error:", e)
if __name__ == "__main__":
main()
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKCmRlZiBtaW5fbW92ZXNfdG9fZGVzdGluYXRpb24oTSwgTiwgZ3JpZCwgc291cmNlLCBkZXN0LCBtb3ZlX3J1bGUpOgogICAgIyBEZWZpbmUgZGlyZWN0aW9ucyBiYXNlZCBvbiB0aGUgbW92ZSBydWxlCiAgICBkeCwgZHkgPSBtb3ZlX3J1bGUKICAgIGRpcmVjdGlvbnMgPSBbCiAgICAgICAgKGR4LCBkeSksICAgICAgICAgIyBmb3J3YXJkCiAgICAgICAgKGR5LCAtZHgpLCAgICAgICAgIyByaWdodCAoOTDCsCBjbG9ja3dpc2UpCiAgICAgICAgKC1keSwgZHgpLCAgICAgICAgIyBsZWZ0ICg5MMKwIGNvdW50ZXJjbG9ja3dpc2UpCiAgICAgICAgKC1keCwgLWR5KSAgICAgICAgIyBiYWNrd2FyZCAoMTgwwrApCiAgICBdCiAgICAKICAgIHZpc2l0ZWQgPSBbW0ZhbHNlXSAqIE4gZm9yIF8gaW4gcmFuZ2UoTSldCiAgICBzeCwgc3kgPSBzb3VyY2UKICAgIGR4LCBkeSA9IGRlc3QKCiAgICAjIEVhcmx5IGV4aXQgaWYgc291cmNlIG9yIGRlc3RpbmF0aW9uIGlzIGJsb2NrZWQKICAgIGlmIG5vdCAoMCA8PSBzeCA8IE0gYW5kIDAgPD0gc3kgPCBOIGFuZCAwIDw9IGR4IDwgTSBhbmQgMCA8PSBkeSA8IE4pOgogICAgICAgIHJldHVybiAtMQogICAgaWYgZ3JpZFtzeF1bc3ldID09IDEgb3IgZ3JpZFtkeF1bZHldID09IDE6CiAgICAgICAgcmV0dXJuIC0xCgogICAgIyBCRlMgcXVldWUKICAgIHF1ZXVlID0gZGVxdWUoKQogICAgcXVldWUuYXBwZW5kKChzeCwgc3ksIDApKQogICAgdmlzaXRlZFtzeF1bc3ldID0gVHJ1ZQoKICAgIHdoaWxlIHF1ZXVlOgogICAgICAgIHgsIHksIHN0ZXBzID0gcXVldWUucG9wbGVmdCgpCiAgICAgICAgCiAgICAgICAgaWYgKHgsIHkpID09IChkeCwgZHkpOgogICAgICAgICAgICByZXR1cm4gc3RlcHMKICAgICAgICAKICAgICAgICBmb3IgbXgsIG15IGluIGRpcmVjdGlvbnM6CiAgICAgICAgICAgIG54LCBueSA9IHggKyBteCwgeSArIG15CiAgICAgICAgICAgIGlmIDAgPD0gbnggPCBNIGFuZCAwIDw9IG55IDwgTiBhbmQgbm90IHZpc2l0ZWRbbnhdW255XSBhbmQgZ3JpZFtueF1bbnldID09IDA6CiAgICAgICAgICAgICAgICB2aXNpdGVkW254XVtueV0gPSBUcnVlCiAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoKG54LCBueSwgc3RlcHMgKyAxKSkKCiAgICByZXR1cm4gLTEgICMgTm90IHJlYWNoYWJsZQoKIyBJbnB1dCByZWFkaW5nCmRlZiBtYWluKCk6CiAgICB0cnk6CiAgICAgICAgTSwgTiA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgICAgICBncmlkID0gW2xpc3QobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkgZm9yIF8gaW4gcmFuZ2UoTSldCiAgICAgICAgc291cmNlID0gdHVwbGUobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKICAgICAgICBkZXN0ID0gdHVwbGUobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKICAgICAgICBtb3ZlX3J1bGUgPSB0dXBsZShtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKQogICAgICAgIAogICAgICAgIHJlc3VsdCA9IG1pbl9tb3Zlc190b19kZXN0aW5hdGlvbihNLCBOLCBncmlkLCBzb3VyY2UsIGRlc3QsIG1vdmVfcnVsZSkKICAgICAgICBwcmludChyZXN1bHQpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoIkVycm9yOiIsIGUpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCg==