#include <bits/stdc++.h>
using namespace ::std;
template <class T>
T SQR(T N) {
  return (T)N * N;
}
template <class T>
double DIST(T a, T b) {
  return 1.0 * sqrt(SQR(double(a)) + SQR(double(b)));
}
template <class T>
bool CROSS(pair<T, T> a, pair<T, T> b, pair<T, T> c) {
  return (b.first - a.first) * (c.second - b.second) >=
         (b.second - a.second) * (c.first - b.first);
}
int px[] = {0, 1, -1, 0, -1, -1, 1, 1};
int py[] = {1, 0, 0, -1, -1, 1, -1, 1};
const double EPS = 1e-9;
const double PI = acos(-1);
const double GR = 1.6180339887498948;
const int M = 26;
inline long long power(long long a, long long p, long long mod) {
  long long x = a % mod, res = 1;
  while (p) {
    if (p & 1) res = (res * x) % mod;
    p /= 2, x = (x * x) % mod;
  }
  return res;
}
int F[207];
inline void Fail(string str) {
  string s = str;
  reverse(s.begin(), s.end());
  s = s + "#" + str;
  int len = s.length();
  for (int i = 1; i < len; ++i) {
    int j = F[i - 1];
    while (j > 0 and s[i] != s[j]) j = F[j - 1];
    if (s[i] == s[j]) ++j;
    F[i] = j;
  }
}
int main() {
  cin.tie(0);
  cout.tie(0);
  int n, m, c, d, a, b, k;
  int test;
  scanf("%d", &test);
  for (int t = 1; t <= test; ++t) {
    scanf("%d", &n);
    int l[n], r[n];
    vector<int> points;
    for (int i = 0; i < n; ++i) {
      scanf("%d%d", &l[i], &r[i]);
      points.emplace_back(l[i]), points.emplace_back(r[i]);
    }
    sort(points.begin(), points.end()),
        points.erase(unique(points.begin(), points.end()), points.end()),
        m = points.size();
    int dp[m][m];
    for (int i = 0; i < m; ++i)
      for (int j = 0; j < m; ++j) dp[i][j] = 0;
    vector<int> segs[m];
    for (int i = 0; i < n; ++i) {
      l[i] = lower_bound(points.begin(), points.end(), l[i]) - points.begin();
      r[i] = lower_bound(points.begin(), points.end(), r[i]) - points.begin();
      dp[l[i]][r[i]] = 1;
      segs[l[i]].emplace_back(r[i]);
    }
    for (int i = 0; i < m; ++i) sort(segs[i].begin(), segs[i].end());
    for (int ln = 2; ln <= m; ++ln)
      for (int i = 0; i + ln <= m; ++i) {
        int j = i + ln - 1;
        int x = dp[i][j];
        dp[i][j] = 0;
        dp[i][j] = max(dp[i][j], max(dp[i + 1][j], dp[i][j - 1]));
        for (int k : segs[i]) {
          if (k >= j) break;
          dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j]);
        }
        dp[i][j] += x;
      }
    printf("%d\n", dp[0][m - 1]);
  }
}
