constint N =5e5+5;int T, n;struct node {int x, y;}p[N];int a[N];int dp[6005][6005];
vector <int> ve[N];intmain(void){
CLOSE;
cin >> T;while(T --){
cin >> n;for(int i =1; i <= n ; i ++){
cin >> p[i].x >> p[i].y;
a[i*2-1]= p[i].x, a[i*2]= p[i].y;}
sort (a +1, a +1+2* n);int len = unique (a +1, a +1+2* n)- a -1;for(int i =1; i <= n ; i ++){
p[i].x =lower_bound(a +1, a +1+ len , p[i].x)- a;
p[i].y =lower_bound(a +1, a +1+ len , p[i].y)- a;
ve[p[i].x].pb(p[i].y);}for(int i =1; i <= len ; i ++)for(int j =1; j <= len ; j ++)
dp[i][j]=0;for(int l =1; l <= len ; l ++){for(int i =1; i <= len ; i ++){int j = i + l -1;if(j > len)break;
dp[i][j]= max (dp[i+1][j], dp[i][j-1]);int cnt =0;for(auto v : ve[i]){if(v == j) cnt ++;if(v >= j)continue;
dp[i][j]= max (dp[i][j], dp[i][v]+ dp[v+1][j]);}
dp[i][j]+= cnt;}}
cout << dp[1][len]<< endl;for(int i =1; i <= len ; i ++)
ve[i].clear();}}