#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=305;
int n,dis[N][N],st[N][N],cnt;//cnt 存储最少步数 ,st判重, dis数组存储距离
int sx,sy,ex,ey;// sx sy :开始的x位置,y位置
// ex sy:结束的x位置,y位置坐标
int dx[8]={2,1,-1,-2,-2,-1, 1, 2};
int dy[8]={1,2,2 ,1, -1,-2,-2,-1};//定义方向数组
struct Node
{
int x,y;
};
queue<Node> q;
int bfs()
{
memset(st,0,sizeof(st));//初始化判重状态
memset(dis,0,sizeof(dis));//初始化判重状态
queue<Node> q;
Node k;
k.x=sx;k.y=sy;
q.push(k);
st[sx][sy]=1;
dis[sx][sy]=0;
while(!q.empty())
{
auto t=q.front();
q.pop();
if(t.x==ex&&t.y==ey) return dis[t.x][t.y];
for(int i=0;i<8;i++)
{
int ax=t.x+dx[i],ay=t.y+dy[i];
if(ax<0||ax>=n||ay<0||ay>=n||st[ax][ay]) continue;
Node m;
m.x=ax,m.y=ay;
q.push(m);
st[ax][ay]=1;
dis[ax][ay]=dis[t.x][t.y]+1;
}
}
return 0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
cin>>sx>>sy;
cin>>ex>>ey;
cout<<bfs()<<endl;
}
return 0;
}