#include <iostream>
#include <set>
#include <vector>
#define MAX 10000000+100
typedef long long int ll;
using namespace std;
ll Tree[3*MAX],lazy[MAX*2];
void Update(ll s,ll start,ll end,ll left,ll right,ll value)
{
if(lazy[s]!=0)
{
Tree[s]=(lazy[s]*(end-start+1));
if(start!=end)lazy[2*s+1]=lazy[s],lazy[s*2+2]=lazy[s];
lazy[s]=0;
}
if(start>end||left>end||right<start)return;
if(start>=left&&end<=right)
{
Tree[s] = (value*(end-start+1));
if(start!=end)
{
lazy[2*s+1]=value;
lazy[2*s+2]=value;
}
return ;
}
ll mid=(start+end)/2;
Update(2*s+1,start,mid,left,right,value);
Update(2*s+2,mid+1,end,left,right,value);
Tree[s] = Tree[s*2+1]+Tree[2*s+2];
}
ll Read(ll s,ll start,ll end,ll left,ll right)
{
if(start>end||start>right||end<left)return 0;
if(lazy[s]!=0)
{
Tree[s]=(lazy[s]*(end-start+1));
if(start!=end)
{
lazy[2*s+1]=lazy[s];
lazy[2*s+2]=lazy[s];
}
lazy[s]=0;
}
if(start>=left&&end<=right)return Tree[s];
else return (Read(2*s+1,start,(start+end)/2,left,right)+Read(2*s+2,1+((start+end)/2),end,left,right));
}
int main() {
// your code goes here
ll t;
cin>>t;
while(t--)
{
ll n,z=1,li=-1;
cin>>n;
vector<pair<ll,ll> > b;
for(ll i=0;i<n;i++)
{
ll u,v;
li = max(li,v);
cin>>u>>v;
b.push_back(make_pair(u-1,v-1));
}
for(auto v: b)
Update(0,0,li+2,v.first,v.second,z++);
set<ll> a;
for(ll i=0;i<li+2;i++)cout<<Read(0,0,li+2,i,i)<<" ",a.insert(Read(0,0,li+2,i,i));
cout<<endl;
cout<<a.size()-1<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8dmVjdG9yPgojZGVmaW5lIE1BWCAxMDAwMDAwMCsxMDAKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsbCBUcmVlWzMqTUFYXSxsYXp5W01BWCoyXTsKCiAKdm9pZCBVcGRhdGUobGwgcyxsbCBzdGFydCxsbCBlbmQsbGwgbGVmdCxsbCByaWdodCxsbCB2YWx1ZSkKewoJaWYobGF6eVtzXSE9MCkKCXsKCQlUcmVlW3NdPShsYXp5W3NdKihlbmQtc3RhcnQrMSkpOwoJCWlmKHN0YXJ0IT1lbmQpbGF6eVsyKnMrMV09bGF6eVtzXSxsYXp5W3MqMisyXT1sYXp5W3NdOwoJCWxhenlbc109MDsKCX0KCWlmKHN0YXJ0PmVuZHx8bGVmdD5lbmR8fHJpZ2h0PHN0YXJ0KXJldHVybjsKCWlmKHN0YXJ0Pj1sZWZ0JiZlbmQ8PXJpZ2h0KQoJewoJCVRyZWVbc10gPSAodmFsdWUqKGVuZC1zdGFydCsxKSk7CgkJaWYoc3RhcnQhPWVuZCkKCQl7CgkJCWxhenlbMipzKzFdPXZhbHVlOwoJCQlsYXp5WzIqcysyXT12YWx1ZTsKCQl9CgkJcmV0dXJuIDsKCX0KCWxsIG1pZD0oc3RhcnQrZW5kKS8yOwoJVXBkYXRlKDIqcysxLHN0YXJ0LG1pZCxsZWZ0LHJpZ2h0LHZhbHVlKTsKCVVwZGF0ZSgyKnMrMixtaWQrMSxlbmQsbGVmdCxyaWdodCx2YWx1ZSk7CglUcmVlW3NdID0gVHJlZVtzKjIrMV0rVHJlZVsyKnMrMl07Cn0KIApsbCBSZWFkKGxsIHMsbGwgc3RhcnQsbGwgZW5kLGxsIGxlZnQsbGwgcmlnaHQpCnsKCWlmKHN0YXJ0PmVuZHx8c3RhcnQ+cmlnaHR8fGVuZDxsZWZ0KXJldHVybiAwOwoJaWYobGF6eVtzXSE9MCkKCXsKCQlUcmVlW3NdPShsYXp5W3NdKihlbmQtc3RhcnQrMSkpOwoJCWlmKHN0YXJ0IT1lbmQpCgkJewoJCQlsYXp5WzIqcysxXT1sYXp5W3NdOwoJCQlsYXp5WzIqcysyXT1sYXp5W3NdOwoJCX0KCQlsYXp5W3NdPTA7Cgl9CglpZihzdGFydD49bGVmdCYmZW5kPD1yaWdodClyZXR1cm4gVHJlZVtzXTsKCWVsc2UgcmV0dXJuIChSZWFkKDIqcysxLHN0YXJ0LChzdGFydCtlbmQpLzIsbGVmdCxyaWdodCkrUmVhZCgyKnMrMiwxKygoc3RhcnQrZW5kKS8yKSxlbmQsbGVmdCxyaWdodCkpOwogCn0KaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglsbCB0OwoJY2luPj50OwoJd2hpbGUodC0tKQoJewoJCWxsIG4sej0xLGxpPS0xOwoJCWNpbj4+bjsKCQl2ZWN0b3I8cGFpcjxsbCxsbD4gPiBiOwoJCWZvcihsbCBpPTA7aTxuO2krKykKCQl7CgkJCWxsIHUsdjsKCQkJbGkgPSBtYXgobGksdik7CgkJCWNpbj4+dT4+djsKCQkJYi5wdXNoX2JhY2sobWFrZV9wYWlyKHUtMSx2LTEpKTsKCQl9CgkJZm9yKGF1dG8gdjogYikKCQkJVXBkYXRlKDAsMCxsaSsyLHYuZmlyc3Qsdi5zZWNvbmQseisrKTsKCQlzZXQ8bGw+IGE7CgkKCQlmb3IobGwgaT0wO2k8bGkrMjtpKyspY291dDw8UmVhZCgwLDAsbGkrMixpLGkpPDwiICIsYS5pbnNlcnQoUmVhZCgwLDAsbGkrMixpLGkpKTsKCQljb3V0PDxlbmRsOwoJCWNvdXQ8PGEuc2l6ZSgpLTE8PGVuZGw7Cgl9CglyZXR1cm4gMDsKfQ==