#include<bits/stdc++.h>
#define fi first
#define se second
#define pl; printf("\n");
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define mk make_pair
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=1e3+50;
const int inf=0x3f3f3f3f;
const int mod=998244353;
const double eps=1e-9;
const long double pi=acos(-1.0L);
typedef long long LL;
inline LL read()
{
    LL x=0,t=1;
    char ch;
    while(!isdigit(ch=getchar())) if(ch=='-') t=-1;
    while(isdigit(ch)){ x=10*x+ch-'0'; ch=getchar(); }
    return x*t;
}


LL fast_pow(LL x,int k,int p)
{//数的快速幂
    LL ret=1;
    while(k>0){
        if(k&1)ret=(ret*x)%p;
        k>>=1;
        x=(x*x)%p;
    }
    return ret%p;
}
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
typedef map<int,int> mii;
//int book[N];
vector<int> a,b;
map<int,int> ma,mb;
int sa[N],sb[N];
LL da[N],db[N];
int main()
{
    int T=1;
    T=read();
    while (T--)
    {
        int n;
        n=read();
        ma.clear();
        mb.clear();
        a.clear();
        b.clear();
        for (int i=0;i<n;i++)
        {
            int x=read(),y=read();
            if (ma[x]==0)
                a.pb(x);
            ma[x]++;
            if (mb[y]==0)
                b.pb(y);
            mb[y]++;
        }
        sort(a.begin(),a.end());
        sort(b.begin(),b.end());
        int na=a.size();
        int nb=b.size();

        sa[0]=0;
        for (int i=0;i<na;i++)
        {
            int x=a[i];
            sa[i+1]=sa[i]+ma[x];
            da[0]=1LL*ma[x]*(a[i]-a[0]);
        }
        sb[0]=0;
        for (int i=0;i<nb;i++)
        {
            int x=b[i];
            sb[i+1]=sb[i]+mb[x];
            db[0]=1LL*mb[x]*(b[i]-b[0]);
        }
        for (int i=1;i<na;i++)
            da[i]=da[i-1]+1LL*sa[i]-1LL*(n-sa[i]);
        for (int i=1;i<nb;i++)
            db[i]=db[i-1]+1LL*sb[i]-1LL*(n-sb[i]);
        LL mn=0x3f3f3f3f3f3f3f3f;
        LL cnt=0;
        for (int i=0;i<na;i++)
        {
            int bx;
            if (i+1<na&&sa[i+1]*2==n)
                bx=a[i+1]-a[i];
            else
                bx=1;
            for (int j=0;j<nb;j++)
            {
                //printf("%d:%lld %d:%lld\n",i,da[i],j,db[j]);
                LL tmp=da[i]+db[j];
                int by;
                if (j+1<nb&&sb[j+1]*2==n)
                    by=b[j+1]-b[j];
                else
                    by=1;
                if (tmp<mn)
                {
                    mn=tmp;
                    cnt=1LL*bx*by;
                }
                else if (tmp==mn)
                    cnt+=1LL*bx*by;
            }
        }
        printf("%lld\n",cnt);
    }
    return 0;
}
/*
首先你得用 "cf config" 命令来配置一下用户名、密码和代码模板。

如果你想用本工具打比赛，那么最好用 "cf race" 命令。

支持的命令:
  cf config
  cf submit [-f <file>] [<specifier>...]
  cf list [<specifier>...]
  cf parse [<specifier>...]
  cf gen [<alias>]
  cf test [<file>]
  cf watch [all] [<specifier>...]
  cf open [<specifier>...]
  cf stand [<specifier>...]
  cf sid [<specifier>...]
  cf race [<specifier>...]
  cf pull [ac] [<specifier>...]
  cf clone [ac] [<handle>]
  cf upgrade

参数:
  -h --help            帮助。
  --version            显示版本。
  -f <file>, --file <file>, <file>
                       文件的路径，例如 "a.cpp"、"./temp/a.cpp"
  <specifier>          任何有用的文本，例如
                       "https://codeforces.com/contest/100"、
                       "https://codeforces.com/contest/180/problem/A"、
                       "https://codeforces.com/group/Cw4JRyRGXR/contest/269760"、
                       "1111A"、"1111"、"a"、"Cw4JRyRGXR"。
                       你可以任意组合多个 <specifier> 来说明你的需求。
  <alias>              模板的名字，比如 "cpp"。
  ac                   是否只获取 Accpeted 的代码。

例子:
  cf config            配置 cf-tool。
  cf submit            cf 会自动检测你需要提交的文件。
  cf submit -f a.cpp
  cf submit https://codeforces.com/contest/100/A
  cf submit -f a.cpp 100A
  cf submit -f a.cpp 100 a
  cf submit contest 100 a
  cf submit gym 100001 a
  cf list              列出当前比赛的题目通过、时限等信息。
  cf list 1119
  cf parse 100         获取 contest 100 的所有题目的样例到文件夹
                       "{cf}/{contest}/100/" 中。
  cf parse gym 100001a
                       获取 gym 100001 的 a 题的样例到文件夹
                       "{cf}/{gym}/100001/a" 中。
  cf parse gym 100001
                       获取 gym 100001 的所有题目的样例到文件夹
                       "{cf}/{gym}/100001" 中。
  cf parse             获取当前比赛的当前题目到当前文件夹下。
  cf gen               用默认的模板生成一份代码到当前文件夹下。
  cf gen cpp           用名字为 "cpp" 的模板来生成一份代码到当前文件夹下。
  cf test              在当前目录下执行模板里的命令，并测试全部样例。如果你想加一组新的测试数据，
                       新建两个文件 "inK.txt" 和 "ansK.txt" 即可，其中 K 是包含 0~9 的字符串。
  cf watch             查看自己在当前比赛的最后 10 次提交结果。
  cf watch all         查看自己在当前比赛的全部提交结果
  cf open 1136a        用默认的浏览器打开比赛 contest 1136, problem a.
  cf open gym 100136   用默认的浏览器打开比赛 gym 100136.
  cf stand             用默认的浏览器打开当前比赛的榜单。
  cf sid 52531875      用默认的浏览器打开 52531875 这个提交页面。
  cf sid               打开最后一次提交的页面。
  cf race 1136         如果比赛还未开始且进入倒计时，则该命令会倒计时。倒计时完后，会自动打开一些
                       题目页面并拉取样例。
  cf pull 100          拉取比赛 id 为 100 每道题的最新代码到文件夹 "./100/<problem-id>" 下。
  cf pull 100 a        拉取比赛 id 为 100 的题目 a 的最新代码到文件夹 "./100/a" 下。
  cf pull ac 100 a     拉取比赛 id 为 100 的题目 a 的 AC 代码。
  cf pull              拉取当前题目的最新代码到当前文件夹下。
  cf clone xalanq      拉取 xalanq 的所有提交代码。
  cf upgrade           从 GitHub 更新 "cf" 到最新版。

储存的文件:
  cf 会保存数据到以下文件：

  "~/.cf/config"        这是配置文件，包括模版等信息。
  "~/.cf/session"       这是会话文件，包括 cookies、用户名、密码等。

  "~" 这个符号是系统当前用户的主文件夹。
  */
