#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 动态规划 没掌握
struct nod{
long long x;
long long y;
}da[5010];
int dp[2000010];
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&da[i].x,&da[i].y);
}
memset(dp,0x3f,sizeof(dp));
dp[da[0].x]=0;//
for(int i=1;i<n;i++)
{
for(int j=da[i].x-1;j>=da[0].x;j--)//抄博友分析 从横坐标 j 能跳过建筑物 i
{
long long dis=(da[i].x-j )*(da[i].x-j )+(da[i].y-da[0].y)*(da[i].y-da[0].y);
if(dis>da[i].y*da[i].y)
{
break;//重要 不然超时
}
dp[2*da[i].x-j]=min(dp[2*da[i].x-j],dp[j]+1);//抄博友程序
}
}
int ans=0x3f3f3f3f;
for(int i=da[n-1].x;i<=da[n-1].x*2;i++)//抄博友程序
{
ans=min(ans,dp[i]);
}
if(ans==0x3f3f3f3f)
{
cout<<-1<<endl;
}else
{
cout<<ans<<endl;
}
}
return 0;
}