- #include <iostream> 
- #include <cstdio> 
- #include <algorithm> 
- #include <queue> 
- #include <set> 
- #define mp make_pair 
- #define heap priority_queue 
- using namespace std; 
- const int maxn = 40000; 
- const int maxh = 100; 
- int n,l[maxn+1],r[maxn+1],maxi,x[maxn*maxh+1],y[maxn*maxh+1],c[maxn*maxh+1],vt[maxn+1]; 
- void enter() 
- { 
- 	heap <pair<int,int*> > x; 
- 	set <int> s; 
- 	cin >> n; 
- 	for (int i=1; i<=n; i++) 
- 	cin >> l[i] >> r[i]; 
- 	for (int i=1; i<=n; i++) 
- 	{ 
- 		x.push(mp(l[i],&l[i])); 
- 		x.push(mp(r[i],&r[i])); 
- 		s.insert(l[i]); 
- 		s.insert(r[i]); 
- 	} 
- 	int pre=-1; 
- 	int i=s.size()+1; 
- 	maxi=i-1; 
- 	while (!x.empty()) 
- 	{ 
- 		pair<int,int*> y=x.top(); 
- 		if (y.first!=pre)  
- 		{ 
- 			pre=y.first; 
- 			i--; 
- 		} 
- 		*y.second=i; 
- 		x.pop(); 
- 	} 
- 	/*for (int i=1; i<=n; i++) 
- 	cout << l[i] << ' ' << r[i] << '\n'; 
- 	cout << '\n';*/ 
- } 
- void init(int i,int l, int r) 
- { 
- 	x[i]=l; 
- 	y[i]=r; 
- 	c[i]=0; 
- 	if (l!=r) 
- 	{ 
- 		int mid=(l+r)/2; 
- 		init(i*2,l,mid); 
- 		init(i*2+1,mid+1,r); 
- 	} 
- 	else vt[l]=i; 
- } 
- void update(int i, int l, int r, int co) 
- { 
- 	if ((l<=x[i]) and (y[i]<=r)) c[i]=co; 
- 	else 
- 	if (!((y[i]<l) or (x[i]>r))) 
- 	{ 
- 		update(i*2,l,r,co); 
- 		update(i*2+1,l,r,co); 
- 	} 
- } 
- int get(int i) 
- { 
- 	if (i==1) return c[i]; 
- 	else 
- 	return max(c[i],get(i/2)); 
- } 
- void solve() 
- { 
- 	set <int> s; 
- 	init(1,1,maxi); 
- 	for (int i=1; i<=n; i++) 
- 	update(1,l[i],r[i],i); 
- 	for (int i=1; i<=maxi; i++) 
- 	{ 
- 		int p=get(vt[i]); 
- 		if (p!=0) s.insert(p); 
- 		//cout << i << ' ' << get(vt[i]) << '\n'; 
- 	} 
- 	cout << s.size() << '\n'; 
- } 
- int main() 
- { 
- 	ios_base::sync_with_stdio(0); 
- 	//freopen("POSTERS.INP","r",stdin); 
- 	//freopen("POSTERS.OUT","w",stdout); 
- 	int t; 
- 	cin >> t; 
- 	for (int i=1; i<=t; i++) 
- 	{ 
- 		enter(); 
- 		solve(); 
- 	} 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzZXQ+CiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgaGVhcCBwcmlvcml0eV9xdWV1ZQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDQwMDAwOwpjb25zdCBpbnQgbWF4aCA9IDEwMDsKaW50IG4sbFttYXhuKzFdLHJbbWF4bisxXSxtYXhpLHhbbWF4biptYXhoKzFdLHlbbWF4biptYXhoKzFdLGNbbWF4biptYXhoKzFdLHZ0W21heG4rMV07CnZvaWQgZW50ZXIoKQp7CgloZWFwIDxwYWlyPGludCxpbnQqPiA+IHg7CglzZXQgPGludD4gczsKCWNpbiA+PiBuOwoJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspCgljaW4gPj4gbFtpXSA+PiByW2ldOwoJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspCgl7CgkJeC5wdXNoKG1wKGxbaV0sJmxbaV0pKTsKCQl4LnB1c2gobXAocltpXSwmcltpXSkpOwoJCXMuaW5zZXJ0KGxbaV0pOwoJCXMuaW5zZXJ0KHJbaV0pOwoJfQoJaW50IHByZT0tMTsKCWludCBpPXMuc2l6ZSgpKzE7CgltYXhpPWktMTsKCXdoaWxlICgheC5lbXB0eSgpKQoJewoJCXBhaXI8aW50LGludCo+IHk9eC50b3AoKTsKCQlpZiAoeS5maXJzdCE9cHJlKSAKCQl7CgkJCXByZT15LmZpcnN0OwoJCQlpLS07CgkJfQoJCSp5LnNlY29uZD1pOwoJCXgucG9wKCk7Cgl9CgkvKmZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQoJY291dCA8PCBsW2ldIDw8ICcgJyA8PCByW2ldIDw8ICdcbic7Cgljb3V0IDw8ICdcbic7Ki8KfQp2b2lkIGluaXQoaW50IGksaW50IGwsIGludCByKQp7Cgl4W2ldPWw7Cgl5W2ldPXI7CgljW2ldPTA7CglpZiAobCE9cikKCXsKCQlpbnQgbWlkPShsK3IpLzI7CgkJaW5pdChpKjIsbCxtaWQpOwoJCWluaXQoaSoyKzEsbWlkKzEscik7Cgl9CgllbHNlIHZ0W2xdPWk7Cn0Kdm9pZCB1cGRhdGUoaW50IGksIGludCBsLCBpbnQgciwgaW50IGNvKQp7CglpZiAoKGw8PXhbaV0pIGFuZCAoeVtpXTw9cikpIGNbaV09Y287CgllbHNlCglpZiAoISgoeVtpXTxsKSBvciAoeFtpXT5yKSkpCgl7CgkJdXBkYXRlKGkqMixsLHIsY28pOwoJCXVwZGF0ZShpKjIrMSxsLHIsY28pOwoJfQp9CmludCBnZXQoaW50IGkpCnsKCWlmIChpPT0xKSByZXR1cm4gY1tpXTsKCWVsc2UKCXJldHVybiBtYXgoY1tpXSxnZXQoaS8yKSk7Cn0Kdm9pZCBzb2x2ZSgpCnsKCXNldCA8aW50PiBzOwoJaW5pdCgxLDEsbWF4aSk7Cglmb3IgKGludCBpPTE7IGk8PW47IGkrKykKCXVwZGF0ZSgxLGxbaV0scltpXSxpKTsKCWZvciAoaW50IGk9MTsgaTw9bWF4aTsgaSsrKQoJewoJCWludCBwPWdldCh2dFtpXSk7CgkJaWYgKHAhPTApIHMuaW5zZXJ0KHApOwoJCS8vY291dCA8PCBpIDw8ICcgJyA8PCBnZXQodnRbaV0pIDw8ICdcbic7Cgl9Cgljb3V0IDw8IHMuc2l6ZSgpIDw8ICdcbic7Cn0KaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJLy9mcmVvcGVuKCJQT1NURVJTLklOUCIsInIiLHN0ZGluKTsKCS8vZnJlb3BlbigiUE9TVEVSUy5PVVQiLCJ3IixzdGRvdXQpOwoJaW50IHQ7CgljaW4gPj4gdDsKCWZvciAoaW50IGk9MTsgaTw9dDsgaSsrKQoJewoJCWVudGVyKCk7CgkJc29sdmUoKTsKCX0KCXJldHVybiAwOwp9