using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp3
{
public class Program
{
static void Main(string[] args)
{
int test_case = int.Parse(Console.ReadLine());
int[] result= new int[test_case];
int[] dx = new int[8] {2, 2, 1, 1, -2, -2, -1, -1}; // 나이트 움직임 -> ((x 축 2칸 - y 축 1칸) or (x 축 1칸 + y축 2칸))
int[] dy = new int[8] {1, -1, 2, -2, 1, -1, 2, -2};
for (int i = 0; i < test_case; i++)
{
int size = int.Parse(Console.ReadLine());
string[] start_data = Console.ReadLine().Split();
string[] end_data = Console.ReadLine().Split();
Queue<(int, int, int)> q_data = new Queue<(int, int, int)> (); // x축, y축, 이동횟수
int[,] visit = new int[size, size]; // 방분표시
q_data.Enqueue((int.Parse(start_data[0]), int.Parse(start_data[1]), 0));
visit[int.Parse(start_data[0]), int.Parse(start_data[1])] = 1;
while(q_data.Count != 0)
{
var buff = q_data.Dequeue();
int check_x = buff.Item1;
int check_y = buff.Item2;
int c = buff.Item3;
if (check_x == int.Parse(end_data[0]) && check_y == int.Parse(end_data[1]))
{
result[i] = c;
break;
}
for (int j = 0; j < 8; j++)
{
int x = check_x + dx[j];
int y = check_y + dy[j];
if (x < 0 || x >= size || y < 0 || y >= size) continue;
if (visit[x,y] ==1 ) continue;
visit[x,y] = 1;
q_data.Enqueue((x, y, c + 1));
}
}
}
for(int i = 0; i<test_case; i++)
{
Console.WriteLine(result[i]);
}
}
}
}