#include <bits/stdc++.h>
using namespace std;
bool isValid(int kx,int ky,int tx,int ty,int **dp,bool **visited,int n)
{
if(kx >= 0 && kx < n && ky >=0 && ky < n && visited[kx][ky] == false)
return true;
return false;
}
int findMinSteps(int kx,int ky,int tx,int ty,int **dp,bool **visited,int n)
{
// base case
if(tx == kx && ty == ky)
{
dp[tx][ty] = 0;
return 0;
}
if(dp[kx][ky] != -2){
// we've already explored this position
return dp[kx][ky];
}
visited[kx][ky] = true; // avoid infinite loop
// from current position we can move in 8 possible directions
bool a = isValid(kx-2,ky-1,tx,ty,dp,visited,n);
bool b = isValid(kx-2,ky+1,tx,ty,dp,visited,n);
bool c = isValid(kx-1,ky+2,tx,ty,dp,visited,n);
bool d = isValid(kx+1,ky+2,tx,ty,dp,visited,n);
bool e = isValid(kx+2,ky+1,tx,ty,dp,visited,n);
bool f = isValid(kx+2,ky-1,tx,ty,dp,visited,n);
bool g = isValid(kx+1,ky-2,tx,ty,dp,visited,n);
bool h = isValid(kx-1,ky-2,tx,ty,dp,visited,n);
if(a == false && b == false && c == false && d == false && e == false && f == false && g == false && h == false){
visited[kx][ky] = false;
dp[kx][ky] = -1;
return -1;
}
int res = INT_MAX;
if(a)
{
int op1 = findMinSteps(kx-2,ky-1,tx,ty,dp,visited,n);
if(op1 < res && op1 != -1)
res = op1;
}
if(b)
{
int op2 = findMinSteps(kx-2,ky+1,tx,ty,dp,visited,n);
if(op2 < res && op2 != -1)
res = op2;
}
if(c)
{
int op3 = findMinSteps(kx-1,ky+2,tx,ty,dp,visited,n);
if(op3 < res && op3 != -1)
res = op3;
}
if(d)
{
int op4 = findMinSteps(kx+1,ky+2,tx,ty,dp,visited,n);
if(op4 < res && op4 != -1)
res = op4;
}
if(e)
{
int op5 = findMinSteps(kx+2,ky+1,tx,ty,dp,visited,n);
if(op5 < res && op5 != -1)
res = op5;
}
if(f)
{
int op6 = findMinSteps(kx+2,ky-1,tx,ty,dp,visited,n);
if(op6 < res && op6 != -1)
res = op6;
}
if(g)
{
int op7 = findMinSteps(kx+1,ky-2,tx,ty,dp,visited,n);
if(op7 < res && op7 != -1)
res = op7;
}
if(h)
{
int op8 = findMinSteps(kx-1,ky-2,tx,ty,dp,visited,n);
if(op8 < res && op8 != -1)
res = op8;
}
visited[kx][ky] = false;
if(res != INT_MAX)
{
dp[kx][ky] = 1 + res;
}
else
{
dp[kx][ky] = -1;
}
return dp[kx][ky];
}
int main() {
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int kx,ky,tx,ty;
cin>>kx>>ky>>tx>>ty;
kx = kx-1;
ky = ky-1;
tx = tx-1;
ty = ty-1;
int **dp = new int*[n];
bool **visited = new bool*[n];
for(int i=0;i<n;i++)
{
dp[i] = new int[n];
visited[i] = new bool[n];
for(int j=0;j<n;j++){
dp[i][j] = -2;
visited[i][j] = false;
}
}
int minSteps = findMinSteps(kx,ky,tx,ty,dp,visited,n);
/**
------------ Debuging Purpose ---------------
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++){
if(dp[i][j]!=INT_MAX)
cout<<dp[i][j]<<" ";
else
cout<<"#"<<" ";
}
cout<<endl;
}
**/
cout<<minSteps<<endl;
for(int i=0;i<n;i++)
{
delete []visited[i];
delete []dp[i];
}
}
return 0;
}