#include<bits/stdc++.h>
using namespace std;
map<string,string>parent;
map<string,int>sz;
string Find(string u)
{
if(parent[u] == u) return u;
return parent[u] = Find(parent[u]);
}
void Union(string a,string b)
{
parent[a] = b;
sz[a] += sz[b];
sz[b] = sz[a];
}
void solve()
{
int n;
cin >> n;
for(int i = 0;i < n;i++)
{
string a,b;
cin >> a >> b;
if(parent[a] == "") {
parent[a] = a;
sz[a] = 1;
}
if(parent[b] == "") {
parent[b] = b; sz[b] = 1;
}
string x = Find(a);
string y = Find(b);
if(x != y)
{
Union(x,y);
}
//cout<<"parent : "<<parent[a]<<" "<<parent[b]<<endl;
cout<<sz[x]<<endl;
}
parent.clear();
sz.clear();
}
int main()
{
int t;
cin >> t;
while(t--)
{
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm1hcDxzdHJpbmcsc3RyaW5nPnBhcmVudDsKbWFwPHN0cmluZyxpbnQ+c3o7CgpzdHJpbmcgRmluZChzdHJpbmcgdSkKewogICAgaWYocGFyZW50W3VdID09IHUpIHJldHVybiB1OwogICAgcmV0dXJuIHBhcmVudFt1XSA9IEZpbmQocGFyZW50W3VdKTsKfQoKdm9pZCBVbmlvbihzdHJpbmcgYSxzdHJpbmcgYikKewogICAgcGFyZW50W2FdID0gYjsKICAgIHN6W2FdICs9IHN6W2JdOwogICAgc3pbYl0gPSBzelthXTsKfQp2b2lkIHNvbHZlKCkKewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDA7aSA8IG47aSsrKQogICAgewogICAgICAgc3RyaW5nIGEsYjsKICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICBpZihwYXJlbnRbYV0gPT0gIiIpIHsKICAgICAgICAgICAgcGFyZW50W2FdID0gYTsKICAgICAgICAgICAgc3pbYV0gPSAxOwogICAgICAgfQogICAgICAgaWYocGFyZW50W2JdID09ICIiKSB7CiAgICAgICAgICAgIHBhcmVudFtiXSA9IGI7IHN6W2JdID0gMTsKICAgICAgIH0KCiAgICAgICBzdHJpbmcgeCA9IEZpbmQoYSk7CiAgICAgICBzdHJpbmcgeSA9IEZpbmQoYik7CgogICAgICAgaWYoeCAhPSB5KQogICAgICAgewogICAgICAgICAgIFVuaW9uKHgseSk7CiAgICAgICB9CiAgICAgICAvL2NvdXQ8PCJwYXJlbnQgOiAiPDxwYXJlbnRbYV08PCIgIjw8cGFyZW50W2JdPDxlbmRsOwogICAgICAgY291dDw8c3pbeF08PGVuZGw7CgoKICAgIH0KICAgIHBhcmVudC5jbGVhcigpOwogICAgc3ouY2xlYXIoKTsKCn0KaW50IG1haW4oKQp7CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=