#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
struct point
{
int x,y;
}a[100005];
int n;
int sumx[100005],sumy[100005],f1[100005],f2[100005];
vector<int> ss1[100005],ss2[100005];
signed main()
{
int T=read();
while(T--)
{
for(int i=1;i<=n;i++)
{
sumx[i]=0;
sumy[i]=0;
f1[i]=0;
f2[i]=0;
a[i]=(point){0,0};
ss1[i].clear();
ss2[i].clear();
}
n=read();
int s1=0,s2=0;
bool flag=1;
for(int i=1;i<=n;++i)
{
int x=read(),y=read();
sumx[x]++;
sumy[y]++;
ss1[x].push_back(i);
ss2[y].push_back(i);
a[i]=(point){x,y};
}
for(int i=1;i<=n;++i)
{
s1+=sumx[i];
s2+=sumy[i];
if(s1==n/2||s2==n/2)
{
flag=0;
break;
}
}
if(!flag)
{
cout<<2<<endl;
continue;
}
flag=1;
int l=1,r=1,m=0;
while(l<=r)
{
if(!flag) break;
while(m<n/2&&r<=n)
{
m+=sumy[r]-f2[r];
++r;
}
if(m==n/2)
{
flag=0;
break;
}
for(int i=0;i<ss1[l].size();++i)
{
f2[a[ss1[l][i]].y]++;
if(a[ss1[l][i]].y<r) --m;
}
++l;
}
if(m==n/2) flag=0;
if(!flag)
{
cout<<3<<endl;
continue;
}
flag=1;
l=r=1;m=0;
while(l<=r)
{
if(!flag) break;
while(m<n/2&&r<=n)
{
m+=sumx[r]-f1[r];
++r;
}
if(m==n/2)
{
flag=0;
break;
}
for(int i=0;i<ss2[l].size();++i)
{
f1[a[ss2[l][i]].x]++;
if(a[ss2[l][i]].x<r)--m;
}
++l;
}
if(m==n/2) flag=0;
if(!flag)
{
cout<<3<<endl;
}
else
{
cout<<4<<endl;
}
}
}
只对了三个点 对着神犇的代码改来改去 已经变成了神犇的模样