var
t,k,i,j,n:longint;
l,w:array[1..20000] of longint;
procedure swap(var a,b:longint);
var
t:longint;
begin
t:=a;a:=b;b:=t;
end;
procedure qsort(le,ri:longint);
var
i,j,ml,mw:longint;
begin
i:=le;
j:=ri;
ml:=l[(le+ri) shr 1];
mw:=w[(le+ri) shr 1];
repeat
while (l[i]
while (l[j]>ml) or ((l[j]=ml) and (w[j]>mw)) do dec(j);
if i<=j then
begin
swap(l[i],l[j]);
swap(w[i],w[j]);
inc(i);
dec(j);
end;
until i>j;
if j>le then qsort(le,j);
if i
end;
function gettime:longint;
var
f:array[1..20000] of longint;
i,j:longint;
begin
qsort(1,n);
for i:=1 to n do
f[i]:=1;
for i:=2
to n do
for j:=i-1 downto 1 do
begin
if (w[j]>w[i]) and (f[j]+1>f[i]) then
f[i]:=f[j]+1;
{超时,求优化。。}
end;
gettime:=0;
for i:=1 to n do
if gettime
end;
begin
read(t);
for k:=1 to t do
begin
fillchar(l,sizeof(l),0);
fillchar(w,sizeof(w),0);
read(n);
for i:=1 to n do
read(l[i],w[i]);
writeln(gettime);
end;
end.