#include<cstdio>
#include<cmath>
#define ll long long
#define ld double
#define eps 1e-8
ll n,ans,maxn,c,T,m,maxj;
struct node1
{
ld a,b;
void print()
{
printf("y=%lfx^2+%lfx\n",a,b);
}
}k,maxk;
struct node
{
ld x,y;
bool p;
void read()
{
scanf("%lf%lf",&x,&y);
p=1;
}
bool in(node1 d)
{
if (abs(d.a*x*x+d.b*x-y)<=eps)
return true; return false;
}
}pig[30];
bool Empty()
{
for (ll i=1;i<=n;++i)
if (pig[i].p)
return false; return true;
}
bool xd(ld a,ld b)
{
return abs(a-b)<=eps;
}
node1 count(ll i,ll j)
{
node1 p;
ld r1=pig[i].x*pig[i].x,
s1=pig[i].x,
r2=pig[j].x*pig[j].x,
s2=pig[j].x,
c1=pig[i].y,
c2=pig[j].y;
p.a=(c1*s2-c2*s1)/(r1*s2-r2*s1);
p.b=(c1*r2-c2*r1)/(s1*r2-s2*r1);
return p;
}
bool xxd(ll i,ll j)
{
return abs(pig[i].x-pig[j].x)<=eps;
}
void solve()
{
scanf("%lld%lld",&n,&m);
ans=0;
for (ll i=1;i<=n;++i) pig[i].read();
maxn=0;
for (ll i=1;i<=n;++i)
{
if (!pig[i].p) continue;
maxj=i,c=1,maxn=1;
for (ll j=1;j<=n;++j)
{
c=1;
if (i==j||!pig[j].p||xxd(i,j)) continue;
k=count(i,j);
if (k.a>=0.0) continue;
++c;
for (ll o=1;o<=n;++o)
{
if (o==i||o==j||!pig[o].p||xxd(i,o)||xxd(j,o)||!pig[o].in(k)) continue;
++c;
}
if (c>maxn) maxn=c,maxj=j,maxk=k;
}
maxk.print();
for (ll o=1;o<=n;++o)
{
if (o==i||o==maxj||!pig[o].p||!pig[o].in(maxk)) continue;
pig[o].p=0;
}
pig[i].p=pig[maxj].p=0;
++ans;
}
printf("%lld\n",ans);
}
int main()
{
scanf("%lld",&T);
while (T--) solve();
}