# n 입력
n = int(input())
# sx, sy, ex, ey 입력
sx, sy, ex, ey = map(int, input().split())
sx, sy, ex, ey = sx - 1, sy - 1, ex - 1, ey - 1
# in_range
def in_range(x, y):
return 0 <= x < n and 0 <= y < n
# can_move
def can_move(x, y):
# 범위 내에 있고, 방문한 적 없으면 가능
return in_range(x, y) and not visited[x][y]
# bfs()
def bfs():
while q:
x, y = q.popleft()
dxs, dys = [-1, -2, -2, -1, 1, 2, 2, 1], [-2, -1, 1, 2, 2, 1, -1, -2]
for dx, dy in zip(dxs, dys):
nx, ny = x + dx, y + dy
# 갈 수 있으면
if can_move(nx, ny):
# 방문 처리하고
visited[nx][ny] = visited[x][y] + 1
# 큐에 넣어주기
q.append((nx, ny))
# 설계
grid = [
[0] * n
for _ in range(n)
]
# visited
visited = [
[0] * n
for _ in range(n)
]
# 큐 사용준비
from collections import deque
q = deque()
# 큐에 넣어주고
q.append((sx, sy))
# 방문 처리하고
visited[sx][sy] = 1
# bfs()
bfs()
# 방문했으면
if visited[ex][ey]:
print(visited[ex][ey] - 1)
# 방문 못했으면
else:
print(-1)