# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 5
#
# def push(self, k):
# self.c()
# if self.r == 5:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 5 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(5 - p):
# self.q[i] = self.q[p + i]
# self.r = 5 - p
#
#
# d = [0] * 5
# x = queue()
#
# while True:
# z = int(input('1:Input, 2:output, 3:view:>>>'))
# if z == 1:
# y = int(input())
# x.push(y)
# elif z == 2:
# x.pop()
# elif z == 3:
# x.view()
#
# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 50
#
# def push(self, k):
# self.c()
# if self.r == 51:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def empty(self):
# if self.f == self.r:
# return 1
# else:
# return 0
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 51 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(51 - p):
# self.q[i] = self.q[p + i]
# self.r = 51 - p
#
#
# d = []
# k = []
# x = queue()
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# if k[i][j] == 0:
# x.push(10 * i + j)
# # print(i, j)
#
# p = 1
# while x.empty() == 0:
# y = x.pop()
# a = int(y // 10)
# b = int(y % 10)
# k[a][b] = 1
# p = p + 1
# if 0 <= a - 1 < 7 and d[a-1][b] == d[a][b] and k[a-1][b] == 0:
# k[a - 1][b] = 1
# x.push(10 * (a-1) + b)
# if 0 <= a + 1 < 7 and d[a+1][b] == d[a][b] and k[a+1][b] == 0:
# k[a + 1][b] = 1
# x.push(10 * (a+1) + b)
# if 0 <= b - 1 < 7 and d[a][b-1] == d[a][b] and k[a][b-1] == 0:
# k[a][b - 1] = 1
# x.push(10 * a + b-1)
# if 0 <= b + 1 < 7 and d[a][b+1] == d[a][b] and k[a][b+1] == 0:
# k[a][b + 1] = 1
# x.push(10 * a + b+1)
# if p > 2:
# count = count + 1
#
# print(count)
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < 7 and d[a - 1][b] == d[a][b] and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < 7 and d[a + 1][b] == d[a][b] and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < 7 and d[a][b - 1] == d[a][b] and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < 7 and d[a][b + 1] == d[a][b] and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# d = []
# k = []
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# p = - 1
# if k[i][j] == 0:
# f(i, j)
# if p > 2:
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global w, h
# if 0 <= a - 1 < h and d[a - 1][b] == 'L' and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < h and d[a + 1][b] == 'L' and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < w and d[a][b - 1] == 'L' and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < w and d[a][b + 1] == 'L' and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
# if 0 <= a + 1 < h and 0 <= b + 1 < w and d[a + 1][b + 1] == 'L' and k[a + 1][b + 1] == 0:
# k[a + 1][b + 1] = 1
# f(a + 1, b + 1)
# if 0 <= a - 1 < h and 0 <= b + 1 < w and d[a - 1][b + 1] == 'L' and k[a - 1][b + 1] == 0:
# k[a - 1][b + 1] = 1
# f(a - 1, b + 1)
# if 0 <= a + 1 < h and 0 <= b - 1 < w and d[a + 1][b - 1] == 'L' and k[a + 1][b - 1] == 0:
# k[a + 1][b - 1] = 1
# f(a + 1, b - 1)
# if 0 <= a - 1 < h and 0 <= b - 1 < w and d[a - 1][b - 1] == 'L' and k[a - 1][b - 1] == 0:
# k[a - 1][b - 1] = 1
# f(a - 1, b - 1)
#
#
# w, h = map(int, input().split())
# d = []
# k = []
# for i in range(h):
# v = list(input().split())
# d.append(v)
# v1 = [0] * w
# k.append(v1)
# count = 0
#
# for i in range(h):
# for j in range(w):
# if k[i][j] == 0 and d[i][j] == 'L':
# f(i, j)
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < n and d[a - 1][b] == 1 and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < n and d[a + 1][b] == 1 and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < n and d[a][b - 1] == 1 and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < n and d[a][b + 1] == 1 and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# n = int(input())
# d = []
# k = []
# for i in range(n):
# v = list(map(int, input()))
# d.append(v)
# v1 = [0] * n
# k.append(v1)
#
# h = []
# for i in range(n):
# for j in range(n):
# p = 0
# if k[i][j] == 0 and d[i][j] == 1:
# k[i][j] = 1
# f(i, j)
# h.append(p)
# h.sort()
# print(len(h))
# for i in range(len(h)):
# print(h[i])
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b, p):
# global c
# if a == b:
# if p < c:
# c = p
# return
# if p == 40:
# return
# if a - b > 9:
# f(a - 10, b, p + 1)
# elif a - b > 4:
# f(a - 5, b, p + 1)
# elif a - b > 0:
# f(a - 1, b, p + 1)
# elif b - a > 9:
# f(a + 10, b, p + 1)
# elif b - a > 4:
# f(a + 5, b, p + 1)
# else:
# f(a + 1, b, p + 1)
# if a - b == 4:
# f(a - 5, b, p + 1)
# if b - a == 4:
# f(a + 5, b, p + 1)
# if a - b == 8:
# f(a - 10, b, p + 1)
# if b - a == 8:
# f(a + 10, b, p + 1)
# if a - b == 9:
# f(a - 10, b, p + 1)
# if b - a == 9:
# f(a + 10, b, p + 1)
#
#
# a, b = map(int, input().split())
# c = 50
# f(a, b, 0)
# print(c)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
# def f(a, b, x, y, p):
# global n, d, c, k
# d[a][b] = 1
# if a == x and b == y:
# if p < c:
# c = p
# return
# for i in range(8):
# if 0 < a + k[i][0] <= n and 0 < b + k[i][1] <= n and d[a + k[i][0]][b + k[i][1]] == 0:
# d[a + k[i][0]][b + k[i][1]] = 1
# f(a + k[i][0], b + k[i][1], x, y, p + 1)
class queue:
def init(self):
self.f = 0
self.r = 0
self.q = [0] * 500000
def push(self, k):
self.c()
if self.r == 500001:
return 1
self.q[self.r] = k
self.r = self.r + 1
def pop(self):
self.c()
if self.f == self.r:
return
self.f = self.f + 1
return self.q[self.f - 1]
def view(self):
self.c()
for i in range(self.f, self.r, 1):
print(self.q[i], end=' ')
def empty(self):
if self.f == self.r:
return 1
else:
return 0
def c(self):
if self.f == self.r and self.f != 0:
self.f = 0
self.r = 0
if self.r == 500001 and self.f != 0:
p = 0
while self.f != 0:
p = p + 1
self.f = self.f - 1
for i in range(500001 - p):
self.q[i] = self.q[p + i]
self.r = 500001 - p
n = int(input())
k = [[2, 1], [-2, 1], [2, -1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
a, b = map(int, input().split())
x, y = map(int, input().split())
w = queue()
w.push(10000 * a + b)
d[a][b] = 1
while True:
m = w.pop()
m1 = int(m // 10000)
m2 = int(m % 10000)
for i in range(8):
if 0 < m1 + k[i][0] <= n and 0 < m2 + k[i][1] <= n and d[m1 + k[i][0]][m2 + k[i][1]] == 0:
d[m1 + k[i][0]][m2 + k[i][1]] = d[m1][m2] + 1
w.push(10000 * (m1 + k[i][0]) + m2 + k[i][1])
if m1 == x and m2 == y:
break
print(d[x][y] - 1)# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 5
#
# def push(self, k):
# self.c()
# if self.r == 5:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 5 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(5 - p):
# self.q[i] = self.q[p + i]
# self.r = 5 - p
#
#
# d = [0] * 5
# x = queue()
#
# while True:
# z = int(input('1:Input, 2:output, 3:view:>>>'))
# if z == 1:
# y = int(input())
# x.push(y)
# elif z == 2:
# x.pop()
# elif z == 3:
# x.view()
#
# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 50
#
# def push(self, k):
# self.c()
# if self.r == 51:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def empty(self):
# if self.f == self.r:
# return 1
# else:
# return 0
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 51 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(51 - p):
# self.q[i] = self.q[p + i]
# self.r = 51 - p
#
#
# d = []
# k = []
# x = queue()
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# if k[i][j] == 0:
# x.push(10 * i + j)
# # print(i, j)
#
# p = 1
# while x.empty() == 0:
# y = x.pop()
# a = int(y // 10)
# b = int(y % 10)
# k[a][b] = 1
# p = p + 1
# if 0 <= a - 1 < 7 and d[a-1][b] == d[a][b] and k[a-1][b] == 0:
# k[a - 1][b] = 1
# x.push(10 * (a-1) + b)
# if 0 <= a + 1 < 7 and d[a+1][b] == d[a][b] and k[a+1][b] == 0:
# k[a + 1][b] = 1
# x.push(10 * (a+1) + b)
# if 0 <= b - 1 < 7 and d[a][b-1] == d[a][b] and k[a][b-1] == 0:
# k[a][b - 1] = 1
# x.push(10 * a + b-1)
# if 0 <= b + 1 < 7 and d[a][b+1] == d[a][b] and k[a][b+1] == 0:
# k[a][b + 1] = 1
# x.push(10 * a + b+1)
# if p > 2:
# count = count + 1
#
# print(count)
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < 7 and d[a - 1][b] == d[a][b] and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < 7 and d[a + 1][b] == d[a][b] and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < 7 and d[a][b - 1] == d[a][b] and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < 7 and d[a][b + 1] == d[a][b] and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# d = []
# k = []
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# p = - 1
# if k[i][j] == 0:
# f(i, j)
# if p > 2:
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global w, h
# if 0 <= a - 1 < h and d[a - 1][b] == 'L' and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < h and d[a + 1][b] == 'L' and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < w and d[a][b - 1] == 'L' and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < w and d[a][b + 1] == 'L' and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
# if 0 <= a + 1 < h and 0 <= b + 1 < w and d[a + 1][b + 1] == 'L' and k[a + 1][b + 1] == 0:
# k[a + 1][b + 1] = 1
# f(a + 1, b + 1)
# if 0 <= a - 1 < h and 0 <= b + 1 < w and d[a - 1][b + 1] == 'L' and k[a - 1][b + 1] == 0:
# k[a - 1][b + 1] = 1
# f(a - 1, b + 1)
# if 0 <= a + 1 < h and 0 <= b - 1 < w and d[a + 1][b - 1] == 'L' and k[a + 1][b - 1] == 0:
# k[a + 1][b - 1] = 1
# f(a + 1, b - 1)
# if 0 <= a - 1 < h and 0 <= b - 1 < w and d[a - 1][b - 1] == 'L' and k[a - 1][b - 1] == 0:
# k[a - 1][b - 1] = 1
# f(a - 1, b - 1)
#
#
# w, h = map(int, input().split())
# d = []
# k = []
# for i in range(h):
# v = list(input().split())
# d.append(v)
# v1 = [0] * w
# k.append(v1)
# count = 0
#
# for i in range(h):
# for j in range(w):
# if k[i][j] == 0 and d[i][j] == 'L':
# f(i, j)
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < n and d[a - 1][b] == 1 and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < n and d[a + 1][b] == 1 and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < n and d[a][b - 1] == 1 and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < n and d[a][b + 1] == 1 and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# n = int(input())
# d = []
# k = []
# for i in range(n):
# v = list(map(int, input()))
# d.append(v)
# v1 = [0] * n
# k.append(v1)
#
# h = []
# for i in range(n):
# for j in range(n):
# p = 0
# if k[i][j] == 0 and d[i][j] == 1:
# k[i][j] = 1
# f(i, j)
# h.append(p)
# h.sort()
# print(len(h))
# for i in range(len(h)):
# print(h[i])
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b, p):
# global c
# if a == b:
# if p < c:
# c = p
# return
# if p == 40:
# return
# if a - b > 9:
# f(a - 10, b, p + 1)
# elif a - b > 4:
# f(a - 5, b, p + 1)
# elif a - b > 0:
# f(a - 1, b, p + 1)
# elif b - a > 9:
# f(a + 10, b, p + 1)
# elif b - a > 4:
# f(a + 5, b, p + 1)
# else:
# f(a + 1, b, p + 1)
# if a - b == 4:
# f(a - 5, b, p + 1)
# if b - a == 4:
# f(a + 5, b, p + 1)
# if a - b == 8:
# f(a - 10, b, p + 1)
# if b - a == 8:
# f(a + 10, b, p + 1)
# if a - b == 9:
# f(a - 10, b, p + 1)
# if b - a == 9:
# f(a + 10, b, p + 1)
#
#
# a, b = map(int, input().split())
# c = 50
# f(a, b, 0)
# print(c)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
# def f(a, b, x, y, p):
# global n, d, c, k
# d[a][b] = 1
# if a == x and b == y:
# if p < c:
# c = p
# return
# for i in range(8):
# if 0 < a + k[i][0] <= n and 0 < b + k[i][1] <= n and d[a + k[i][0]][b + k[i][1]] == 0:
# d[a + k[i][0]][b + k[i][1]] = 1
# f(a + k[i][0], b + k[i][1], x, y, p + 1)
class queue:
def init(self):
self.f = 0
self.r = 0
self.q = [0] * 500000
def push(self, k):
self.c()
if self.r == 500001:
return 1
self.q[self.r] = k
self.r = self.r + 1
def pop(self):
self.c()
if self.f == self.r:
return
self.f = self.f + 1
return self.q[self.f - 1]
def view(self):
self.c()
for i in range(self.f, self.r, 1):
print(self.q[i], end=' ')
def empty(self):
if self.f == self.r:
return 1
else:
return 0
def c(self):
if self.f == self.r and self.f != 0:
self.f = 0
self.r = 0
if self.r == 500001 and self.f != 0:
p = 0
while self.f != 0:
p = p + 1
self.f = self.f - 1
for i in range(500001 - p):
self.q[i] = self.q[p + i]
self.r = 500001 - p
n = int(input())
k = [[2, 1], [-2, 1], [2, -1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
a, b = map(int, input().split())
x, y = map(int, input().split())
w = queue()
w.push(10000 * a + b)
d[a][b] = 1
while True:
m = w.pop()
m1 = int(m // 10000)
m2 = int(m % 10000)
for i in range(8):
if 0 < m1 + k[i][0] <= n and 0 < m2 + k[i][1] <= n and d[m1 + k[i][0]][m2 + k[i][1]] == 0:
d[m1 + k[i][0]][m2 + k[i][1]] = d[m1][m2] + 1
w.push(10000 * (m1 + k[i][0]) + m2 + k[i][1])
if m1 == x and m2 == y:
break
print(d[x][y] - 1)# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 5
#
# def push(self, k):
# self.c()
# if self.r == 5:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 5 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(5 - p):
# self.q[i] = self.q[p + i]
# self.r = 5 - p
#
#
# d = [0] * 5
# x = queue()
#
# while True:
# z = int(input('1:Input, 2:output, 3:view:>>>'))
# if z == 1:
# y = int(input())
# x.push(y)
# elif z == 2:
# x.pop()
# elif z == 3:
# x.view()
#
# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 50
#
# def push(self, k):
# self.c()
# if self.r == 51:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def empty(self):
# if self.f == self.r:
# else:
# return 0
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 51 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(51 - p):
# self.q[i] = self.q[p + i]
# self.r = 51 - p
#
#
# d = []
# k = []
# x = queue()
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# if k[i][j] == 0:
# x.push(10 * i + j)
# # print(i, j)
#
# p = 1
# while x.empty() == 0:
# y = x.pop()
# a = int(y // 10)
# b = int(y % 10)
# k[a][b] = 1
# p = p + 1
# if 0 <= a - 1 < 7 and d[a-1][b] == d[a][b] and k[a-1][b] == 0:
# k[a - 1][b] = 1
# x.push(10 * (a-1) + b)
# if 0 <= a + 1 < 7 and d[a+1][b] == d[a][b] and k[a+1][b] == 0:
# k[a + 1][b] = 1
# x.push(10 * (a+1) + b)
# if 0 <= b - 1 < 7 and d[a][b-1] == d[a][b] and k[a][b-1] == 0:
# k[a][b - 1] = 1
# x.push(10 * a + b-1)
# if 0 <= b + 1 < 7 and d[a][b+1] == d[a][b] and k[a][b+1] == 0:
# k[a][b + 1] = 1
# x.push(10 * a + b+1)
# if p > 2:
# count = count + 1
#
# print(count)
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < 7 and d[a - 1][b] == d[a][b] and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < 7 and d[a + 1][b] == d[a][b] and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < 7 and d[a][b - 1] == d[a][b] and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < 7 and d[a][b + 1] == d[a][b] and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# d = []
# k = []
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# p = - 1
# if k[i][j] == 0:
# f(i, j)
# if p > 2:
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global w, h
# if 0 <= a - 1 < h and d[a - 1][b] == 'L' and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < h and d[a + 1][b] == 'L' and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < w and d[a][b - 1] == 'L' and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < w and d[a][b + 1] == 'L' and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
# if 0 <= a + 1 < h and 0 <= b + 1 < w and d[a + 1][b + 1] == 'L' and k[a + 1][b + 1] == 0:
# k[a + 1][b + 1] = 1
# f(a + 1, b + 1)
# if 0 <= a - 1 < h and 0 <= b + 1 < w and d[a - 1][b + 1] == 'L' and k[a - 1][b + 1] == 0:
# k[a - 1][b + 1] = 1
# f(a - 1, b + 1)
# if 0 <= a + 1 < h and 0 <= b - 1 < w and d[a + 1][b - 1] == 'L' and k[a + 1][b - 1] == 0:
# k[a + 1][b - 1] = 1
# f(a + 1, b - 1)
# if 0 <= a - 1 < h and 0 <= b - 1 < w and d[a - 1][b - 1] == 'L' and k[a - 1][b - 1] == 0:
# k[a - 1][b - 1] = 1
# f(a - 1, b - 1)
#
#
# w, h = map(int, input().split())
# d = []
# k = []
# for i in range(h):
# v = list(input().split())
# d.append(v)
# v1 = [0] * w
# k.append(v1)
# count = 0
#
# for i in range(h):
# for j in range(w):
# if k[i][j] == 0 and d[i][j] == 'L':
# f(i, j)
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < n and d[a - 1][b] == 1 and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < n and d[a + 1][b] == 1 and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < n and d[a][b - 1] == 1 and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < n and d[a][b + 1] == 1 and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# n = int(input())
# d = []
# k = []
# for i in range(n):
# v = list(map(int, input()))
# d.append(v)
# v1 = [0] * n
# k.append(v1)
#
# h = []
# for i in range(n):
# for j in range(n):
# p = 0
# if k[i][j] == 0 and d[i][j] == 1:
# k[i][j] = 1
# f(i, j)
# h.append(p)
# h.sort()
# print(len(h))
# for i in range(len(h)):
# print(h[i])
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b, p):
# global c
# if a == b:
# if p < c:
# c = p
# return
# if p == 40:
# return
# if a - b > 9:
# f(a - 10, b, p + 1)
# elif a - b > 4:
# f(a - 5, b, p + 1)
# elif a - b > 0:
# f(a - 1, b, p + 1)
# elif b - a > 9:
# f(a + 10, b, p + 1)
# elif b - a > 4:
# f(a + 5, b, p + 1)
# else:
# f(a + 1, b, p + 1)
# if a - b == 4:
# f(a - 5, b, p + 1)
# if b - a == 4:
# f(a + 5, b, p + 1)
# if a - b == 8:
# f(a - 10, b, p + 1)
# if b - a == 8:
# f(a + 10, b, p + 1)
# if a - b == 9:
# f(a - 10, b, p + 1)
# if b - a == 9:
# f(a + 10, b, p + 1)
#
#
# a, b = map(int, input().split())
# c = 50
# f(a, b, 0)
# print(c)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
# def f(a, b, x, y, p):
# global n, d, c, k
# d[a][b] = 1
# if a == x and b == y:
# if p < c:
# c = p
# return
# for i in range(8):
# if 0 < a + k[i][0] <= n and 0 < b + k[i][1] <= n and d[a + k[i][0]][b + k[i][1]] == 0:
# d[a + k[i][0]][b + k[i][1]] = 1
# f(a + k[i][0], b + k[i][1], x, y, p + 1)
class queue:
def init(self):
self.f = 0
self.r = 0
self.q = [0] * 500000
def push(self, k):
self.c()
if self.r == 500001:
return 1
self.q[self.r] = k
self.r = self.r + 1
def pop(self):
self.c()
if self.f == self.r:
return
self.f = self.f + 1
return self.q[self.f - 1]
def view(self):
self.c()
for i in range(self.f, self.r, 1):
print(self.q[i], end=' ')
def empty(self):
if self.f == self.r:
return 1
else:
return 0
def c(self):
if self.f == self.r and self.f != 0:
self.f = 0
self.r = 0
if self.r == 500001 and self.f != 0:
p = 0
while self.f != 0:
p = p + 1
self.f = self.f - 1
for i in range(500001 - p):
self.q[i] = self.q[p + i]
self.r = 500001 - p
n = int(input())
k = [[2, 1], [-2, 1], [2, -1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
a, b = map(int, input().split())
x, y = map(int, input().split())
w = queue()
w.push(10000 * a + b)
d[a][b] = 1
while True:
m = w.pop()
m1 = int(m // 10000)
m2 = int(m % 10000)
for i in range(8):
if 0 < m1 + k[i][0] <= n and 0 < m2 + k[i][1] <= n and d[m1 + k[i][0]][m2 + k[i][1]] == 0:
d[m1 + k[i][0]][m2 + k[i][1]] = d[m1][m2] + 1
w.push(10000 * (m1 + k[i][0]) + m2 + k[i][1])
if m1 == x and m2 == y:
break
print(d[x][y] - 1)# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 5
#
# def push(self, k):
# self.c()
# if self.r == 5:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 5 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(5 - p):
# self.q[i] = self.q[p + i]
# self.r = 5 - p
#
#
# d = [0] * 5
# x = queue()
#
# while True:
# z = int(input('1:Input, 2:output, 3:view:>>>'))
# if z == 1:
# y = int(input())
# x.push(y)
# elif z == 2:
# x.pop()
# elif z == 3:
# x.view()
#
# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 50
#
# def push(self, k):
# self.c()
# if self.r == 51:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def empty(self):
# if self.f == self.r:
# return 1
# else:
# return 0
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 51 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(51 - p):
# self.q[i] = self.q[p + i]
# self.r = 51 - p
#
#
# d = []
# k = []
# x = queue()
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# if k[i][j] == 0:
# x.push(10 * i + j)
# # print(i, j)
#
# p = 1
# while x.empty() == 0:
# y = x.pop()
# a = int(y // 10)
# b = int(y % 10)
# k[a][b] = 1
# p = p + 1
# if 0 <= a - 1 < 7 and d[a-1][b] == d[a][b] and k[a-1][b] == 0:
# k[a - 1][b] = 1
# x.push(10 * (a-1) + b)
# if 0 <= a + 1 < 7 and d[a+1][b] == d[a][b] and k[a+1][b] == 0:
# k[a + 1][b] = 1
# x.push(10 * (a+1) + b)
# if 0 <= b - 1 < 7 and d[a][b-1] == d[a][b] and k[a][b-1] == 0:
# k[a][b - 1] = 1
# x.push(10 * a + b-1)
# if 0 <= b + 1 < 7 and d[a][b+1] == d[a][b] and k[a][b+1] == 0:
# k[a][b + 1] = 1
# x.push(10 * a + b+1)
# if p > 2:
# count = count + 1
#
# print(count)
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < 7 and d[a - 1][b] == d[a][b] and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < 7 and d[a + 1][b] == d[a][b] and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < 7 and d[a][b - 1] == d[a][b] and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < 7 and d[a][b + 1] == d[a][b] and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# d = []
# k = []
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# p = - 1
# if k[i][j] == 0:
# f(i, j)
# if p > 2:
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global w, h
# if 0 <= a - 1 < h and d[a - 1][b] == 'L' and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < h and d[a + 1][b] == 'L' and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < w and d[a][b - 1] == 'L' and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < w and d[a][b + 1] == 'L' and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
# if 0 <= a + 1 < h and 0 <= b + 1 < w and d[a + 1][b + 1] == 'L' and k[a + 1][b + 1] == 0:
# k[a + 1][b + 1] = 1
# f(a + 1, b + 1)
# if 0 <= a - 1 < h and 0 <= b + 1 < w and d[a - 1][b + 1] == 'L' and k[a - 1][b + 1] == 0:
# k[a - 1][b + 1] = 1
# f(a - 1, b + 1)
# if 0 <= a + 1 < h and 0 <= b - 1 < w and d[a + 1][b - 1] == 'L' and k[a + 1][b - 1] == 0:
# k[a + 1][b - 1] = 1
# f(a + 1, b - 1)
# if 0 <= a - 1 < h and 0 <= b - 1 < w and d[a - 1][b - 1] == 'L' and k[a - 1][b - 1] == 0:
# k[a - 1][b - 1] = 1
# f(a - 1, b - 1)
#
#
# w, h = map(int, input().split())
# d = []
# k = []
# for i in range(h):
# v = list(input().split())
# d.append(v)
# v1 = [0] * w
# k.append(v1)
# count = 0
#
# for i in range(h):
# for j in range(w):
# if k[i][j] == 0 and d[i][j] == 'L':
# f(i, j)
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < n and d[a - 1][b] == 1 and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < n and d[a + 1][b] == 1 and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < n and d[a][b - 1] == 1 and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < n and d[a][b + 1] == 1 and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# n = int(input())
# d = []
# k = []
# for i in range(n):
# v = list(map(int, input()))
# d.append(v)
# v1 = [0] * n
# k.append(v1)
#
# h = []
# for i in range(n):
# for j in range(n):
# p = 0
# if k[i][j] == 0 and d[i][j] == 1:
# k[i][j] = 1
# f(i, j)
# h.append(p)
# h.sort()
# print(len(h))
# for i in range(len(h)):
# print(h[i])
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b, p):
# global c
# if a == b:
# if p < c:
# c = p
# return
# if p == 40:
# return
# if a - b > 9:
# f(a - 10, b, p + 1)
# elif a - b > 4:
# f(a - 5, b, p + 1)
# elif a - b > 0:
# f(a - 1, b, p + 1)
# elif b - a > 9:
# f(a + 10, b, p + 1)
# elif b - a > 4:
# f(a + 5, b, p + 1)
# else:
# f(a + 1, b, p + 1)
# if a - b == 4:
# f(a - 5, b, p + 1)
# if b - a == 4:
# f(a + 5, b, p + 1)
# if a - b == 8:
# f(a - 10, b, p + 1)
# if b - a == 8:
# f(a + 10, b, p + 1)
# if a - b == 9:
# f(a - 10, b, p + 1)
# if b - a == 9:
# f(a + 10, b, p + 1)
#
#
# a, b = map(int, input().split())
# c = 50
# f(a, b, 0)
# print(c)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
# def f(a, b, x, y, p):
# global n, d, c, k
# d[a][b] = 1
# if a == x and b == y:
# if p < c:
# c = p
# return
# for i in range(8):
# if 0 < a + k[i][0] <= n and 0 < b + k[i][1] <= n and d[a + k[i][0]][b + k[i][1]] == 0:
# d[a + k[i][0]][b + k[i][1]] = 1
# f(a + k[i][0], b + k[i][1], x, y, p + 1)
class queue:
def init(self):
self.f = 0
self.r = 0
self.q = [0] * 500000
def push(self, k):
self.c()
if self.r == 500001:
return 1
self.q[self.r] = k
self.r = self.r + 1
def pop(self):
self.c()
if self.f == self.r:
return
self.f = self.f + 1
return self.q[self.f - 1]
def view(self):
self.c()
for i in range(self.f, self.r, 1):
print(self.q[i], end=' ')
def empty(self):
if self.f == self.r:
return 1
else:
return 0
def c(self):
if self.f == self.r and self.f != 0:
self.f = 0
self.r = 0
if self.r == 500001 and self.f != 0:
p = 0
while self.f != 0:
p = p + 1
self.f = self.f - 1
for i in range(500001 - p):
self.q[i] = self.q[p + i]
self.r = 500001 - p
n = int(input())
k = [[2, 1], [-2, 1], [2, -1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
a, b = map(int, input().split())
x, y = map(int, input().split())
w = queue()
w.push(10000 * a + b)
d[a][b] = 1
while True:
m = w.pop()
m1 = int(m // 10000)
m2 = int(m % 10000)
for i in range(8):
if 0 < m1 + k[i][0] <= n and 0 < m2 + k[i][1] <= n and d[m1 + k[i][0]][m2 + k[i][1]] == 0:
d[m1 + k[i][0]][m2 + k[i][1]] = d[m1][m2] + 1
w.push(10000 * (m1 + k[i][0]) + m2 + k[i][1])
if m1 == x and m2 == y:
break
print(d[x][y] - 1)# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 5
#
# def push(self, k):
# self.c()
# if self.r == 5:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 5 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(5 - p):
# self.q[i] = self.q[p + i]
# self.r = 5 - p
#
#
# d = [0] * 5
# x = queue()
#
# while True:
# z = int(input('1:Input, 2:output, 3:view:>>>'))
# if z == 1:
# y = int(input())
# x.push(y)
# elif z == 2:
# x.pop()
# elif z == 3:
# x.view()
#
# class queue:
# def init(self):
# self.f = 0
# self.r = 0
# self.q = [0] * 50
#
# def push(self, k):
# self.c()
# if self.r == 51:
# print('queue is full')
# return 1
# self.q[self.r] = k
# self.r = self.r + 1
#
# def pop(self):
# if self.f == self.r:
# print('queue is empty')
# return
# self.f = self.f + 1
# self.c()
# return self.q[self.f - 1]
#
# def view(self):
# self.c()
# for i in range(self.f, self.r, 1):
# print(self.q[i], end=' ')
#
# def empty(self):
# if self.f == self.r:
# return 1
# else:
# return 0
#
# def c(self):
# if self.f == self.r and self.f != 0:
# self.f = 0
# self.r = 0
# if self.r == 51 and self.f != 0:
# p = 0
# while self.f != 0:
# p = p + 1
# self.f = self.f - 1
# for i in range(51 - p):
# self.q[i] = self.q[p + i]
# self.r = 51 - p
#
#
# d = []
# k = []
# x = queue()
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# if k[i][j] == 0:
# x.push(10 * i + j)
# # print(i, j)
#
# p = 1
# while x.empty() == 0:
# y = x.pop()
# a = int(y // 10)
# b = int(y % 10)
# k[a][b] = 1
# p = p + 1
# if 0 <= a - 1 < 7 and d[a-1][b] == d[a][b] and k[a-1][b] == 0:
# k[a - 1][b] = 1
# x.push(10 * (a-1) + b)
# if 0 <= a + 1 < 7 and d[a+1][b] == d[a][b] and k[a+1][b] == 0:
# k[a + 1][b] = 1
# x.push(10 * (a+1) + b)
# if 0 <= b - 1 < 7 and d[a][b-1] == d[a][b] and k[a][b-1] == 0:
# k[a][b - 1] = 1
# x.push(10 * a + b-1)
# if 0 <= b + 1 < 7 and d[a][b+1] == d[a][b] and k[a][b+1] == 0:
# k[a][b + 1] = 1
# x.push(10 * a + b+1)
# if p > 2:
# count = count + 1
#
# print(count)
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < 7 and d[a - 1][b] == d[a][b] and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < 7 and d[a + 1][b] == d[a][b] and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < 7 and d[a][b - 1] == d[a][b] and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < 7 and d[a][b + 1] == d[a][b] and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# d = []
# k = []
# for i in range(7):
# v = list(map(int, input().split()))
# d.append(v)
# v1 = [0] * 7
# k.append(v1)
# count = 0
#
# for i in range(7):
# for j in range(7):
# p = - 1
# if k[i][j] == 0:
# f(i, j)
# if p > 2:
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global w, h
# if 0 <= a - 1 < h and d[a - 1][b] == 'L' and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < h and d[a + 1][b] == 'L' and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < w and d[a][b - 1] == 'L' and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < w and d[a][b + 1] == 'L' and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
# if 0 <= a + 1 < h and 0 <= b + 1 < w and d[a + 1][b + 1] == 'L' and k[a + 1][b + 1] == 0:
# k[a + 1][b + 1] = 1
# f(a + 1, b + 1)
# if 0 <= a - 1 < h and 0 <= b + 1 < w and d[a - 1][b + 1] == 'L' and k[a - 1][b + 1] == 0:
# k[a - 1][b + 1] = 1
# f(a - 1, b + 1)
# if 0 <= a + 1 < h and 0 <= b - 1 < w and d[a + 1][b - 1] == 'L' and k[a + 1][b - 1] == 0:
# k[a + 1][b - 1] = 1
# f(a + 1, b - 1)
# if 0 <= a - 1 < h and 0 <= b - 1 < w and d[a - 1][b - 1] == 'L' and k[a - 1][b - 1] == 0:
# k[a - 1][b - 1] = 1
# f(a - 1, b - 1)
#
#
# w, h = map(int, input().split())
# d = []
# k = []
# for i in range(h):
# v = list(input().split())
# d.append(v)
# v1 = [0] * w
# k.append(v1)
# count = 0
#
# for i in range(h):
# for j in range(w):
# if k[i][j] == 0 and d[i][j] == 'L':
# f(i, j)
# count = count + 1
#
# print(count)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b):
# global d
# global k
# global p
# p = p + 1
# if 0 <= a - 1 < n and d[a - 1][b] == 1 and k[a - 1][b] == 0:
# k[a - 1][b] = 1
# f(a - 1, b)
# if 0 <= a + 1 < n and d[a + 1][b] == 1 and k[a + 1][b] == 0:
# k[a + 1][b] = 1
# f(a + 1, b)
# if 0 <= b - 1 < n and d[a][b - 1] == 1 and k[a][b - 1] == 0:
# k[a][b - 1] = 1
# f(a, b - 1)
# if 0 <= b + 1 < n and d[a][b + 1] == 1 and k[a][b + 1] == 0:
# k[a][b + 1] = 1
# f(a, b + 1)
#
#
# n = int(input())
# d = []
# k = []
# for i in range(n):
# v = list(map(int, input()))
# d.append(v)
# v1 = [0] * n
# k.append(v1)
#
# h = []
# for i in range(n):
# for j in range(n):
# p = 0
# if k[i][j] == 0 and d[i][j] == 1:
# k[i][j] = 1
# f(i, j)
# h.append(p)
# h.sort()
# print(len(h))
# for i in range(len(h)):
# print(h[i])
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# def f(a, b, p):
# global c
# if a == b:
# if p < c:
# c = p
# return
# if p == 40:
# return
# if a - b > 9:
# f(a - 10, b, p + 1)
# elif a - b > 4:
# f(a - 5, b, p + 1)
# elif a - b > 0:
# f(a - 1, b, p + 1)
# elif b - a > 9:
# f(a + 10, b, p + 1)
# elif b - a > 4:
# f(a + 5, b, p + 1)
# else:
# f(a + 1, b, p + 1)
# if a - b == 4:
# f(a - 5, b, p + 1)
# if b - a == 4:
# f(a + 5, b, p + 1)
# if a - b == 8:
# f(a - 10, b, p + 1)
# if b - a == 8:
# f(a + 10, b, p + 1)
# if a - b == 9:
# f(a - 10, b, p + 1)
# if b - a == 9:
# f(a + 10, b, p + 1)
#
#
# a, b = map(int, input().split())
# c = 50
# f(a, b, 0)
# print(c)
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
# def f(a, b, x, y, p):
# global n, d, c, k
# d[a][b] = 1
# if a == x and b == y:
# if p < c:
# c = p
# return
# for i in range(8):
# if 0 < a + k[i][0] <= n and 0 < b + k[i][1] <= n and d[a + k[i][0]][b + k[i][1]] == 0:
# d[a + k[i][0]][b + k[i][1]] = 1
# f(a + k[i][0], b + k[i][1], x, y, p + 1)
class queue:
def init(self):
self.f = 0
self.r = 0
self.q = [0] * 500000
def push(self, k):
self.c()
if self.r == 500001:
return 1
self.q[self.r] = k
self.r = self.r + 1
def pop(self):
self.c()
if self.f == self.r:
return
self.f = self.f + 1
return self.q[self.f - 1]
def view(self):
self.c()
for i in range(self.f, self.r, 1):
print(self.q[i], end=' ')
def empty(self):
if self.f == self.r:
return 1
else:
return 0
def c(self):
if self.f == self.r and self.f != 0:
self.f = 0
self.r = 0
if self.r == 500001 and self.f != 0:
p = 0
while self.f != 0:
p = p + 1
self.f = self.f - 1
for i in range(500001 - p):
self.q[i] = self.q[p + i]
self.r = 500001 - p
n = int(input())
k = [[2, 1], [-2, 1], [2, -1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]
d = []
for i in range(n + 1):
v = [0] * (n + 1)
d.append(v)
a, b = map(int, input().split())
x, y = map(int, input().split())
w = queue()
w.push(10000 * a + b)
d[a][b] = 1
while True:
m = w.pop()
m1 = int(m // 10000)
m2 = int(m % 10000)
for i in range(8):
if 0 < m1 + k[i][0] <= n and 0 < m2 + k[i][1] <= n and d[m1 + k[i][0]][m2 + k[i][1]] == 0:
d[m1 + k[i][0]][m2 + k[i][1]] = d[m1][m2] + 1
w.push(10000 * (m1 + k[i][0]) + m2 + k[i][1])
if m1 == x and m2 == y:
break
print(d[x][y] - 1)