미로 탈출

벽이 있는 격자에서 벽 한 칸을 한 번만 부술 수 있을 때 시작점에서 출구까지의 최단 이동 횟수를 구한다.

보통7BFS그래프배열아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

홍익이가 사악한 마법사의 꾐에 속아 N×MN \times M 크기의 미로 안, (Hx,Hy)(Hx, Hy) 칸에 떨어졌다. 다행히 홍익이는 미로의 탈출 위치 (Ex,Ey)(Ex, Ey)를 알고 있다. 하지만 미로 곳곳에 마법사가 세운 벽이 있어서 빠져나가기가 쉽지 않다.

홍익이에게는 마법사의 연구실에서 훔친 지팡이가 있어서 벽 한 칸을 빈칸으로 바꿀 수 있다. 그렇지만 지팡이는 단 한 번만 쓸 수 있다.

홍익이는 상하좌우로 맞닿은 칸으로만 움직이고, 한 칸을 움직이는 데 모두 같은 시간이 든다. 벽을 부수는 데는 시간이 들지 않는다. 홍익이가 미로에서 탈출할 수 있는지 판단하고, 할 수 있다면 가장 빠른 경로의 이동 횟수 DD를 구하자.

입력

N M
Hx Hy
Ex Ey

네째 줄부터 NN개의 줄에 걸쳐 미로가 주어진다. 각 줄은 공백으로 구분된 MM개의 정수로 이루어지며, 0은 빈칸, 1은 벽이다.

  • 2N10002 \le N \le 1000, 2M10002 \le M \le 1000
  • 1Hx,ExN1 \le Hx, Ex \le N, 1Hy,EyM1 \le Hy, Ey \le M. HxHxExEx는 행 번호, HyHyEyEy는 열 번호이고, 왼쪽 위 칸이 (1,1)(1, 1)이다.
  • (Hx,Hy)(Ex,Ey)(Hx, Hy) \neq (Ex, Ey)
  • 출발 칸과 탈출 칸은 항상 빈칸이다.

출력

탈출 칸까지 가는 최소 이동 횟수 DD를 한 줄에 출력한다. 지팡이를 한 번 써도 탈출 칸에 닿을 수 없으면 -1을 출력한다.

힌트

첫 번째 예제에서는 제일 왼쪽 위 칸에서 제일 오른쪽 아래 칸으로 가려면 (3,2)(3, 2)의 벽을 부수고 지나가면 된다.