#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define Samurai ios_base::sync_with_stdio(false), cout.tie(NULL), cin.tie(NULL);
#define pr_g priority_queue<pair<ll,int>, vector<pair<ll,int>>,greater<pair<ll,int>>>
int dx [] = {0, 0, 1, -1, 1, 1, -1, -1};
int dy [] = {-1, 1, 0, 0, -1, 1, 1, -1};
char dir [] = {'>', '<', '^', 'v'};
int Lx[] = {2, 2, -2, -2, 1, 1, -1, -1};
int Ly[] = {1, -1, 1, -1, 2, -2, 2, -2};
const double PI = acos(-1.0);
#define el '\n'
const ll mod = 1e9 + 7, N = 2e5 + 5, OO = 0x3f3f3f3f;
bool cmp(pair<int, string>&a, pair<int, string>&b) {
if (a.first != b.first)
return a.first > b.first;
else
return a.second < b.second;
}
void solve() {
int n; cin >> n;
cin.ignore();
set<string> s;
vector<string> v;
map<string, int> mp;
for (int i = 0; i < n; i++) {
string x;
getline(cin, x);
if (isupper(x[0])) {
for (auto &j : s) {
v.push_back(j);
mp[j]++;
}
s.clear();
v.push_back(x);
}
else s.insert(x);
}
for (auto &j : s) {
v.push_back(j);
mp[j]++;
}
vector<pair<int, string>> ans;
for (int i = 0; i < v.size(); i++) {
string x = v[i];
int c = 0;
while (i + 1 < v.size() && islower(v[i + 1][0])) {
i++;
if (mp[v[i]] == 1)
c++;
}
ans.push_back({c, x});
}
sort(ans.begin(), ans.end(), cmp);
for (int i = 0; i < ans.size(); i++)
cout << ans[i].second << ' ' << ans[i].first << el;
}
int main() { Samurai
freopen("coaches.in", "r", stdin);
int _t = 1; cin >> _t;
cin.ignore();
for (int i = 1; i <= _t; i++){
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgU2FtdXJhaSBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY291dC50aWUoTlVMTCksIGNpbi50aWUoTlVMTCk7CiNkZWZpbmUgcHJfZyBwcmlvcml0eV9xdWV1ZTxwYWlyPGxsLGludD4sIHZlY3RvcjxwYWlyPGxsLGludD4+LGdyZWF0ZXI8cGFpcjxsbCxpbnQ+Pj4KaW50IGR4IFtdID0gezAsIDAsIDEsIC0xLCAxLCAxLCAtMSwgLTF9OwppbnQgZHkgW10gPSB7LTEsIDEsIDAsIDAsIC0xLCAxLCAxLCAtMX07CmNoYXIgZGlyIFtdID0geyc+JywgJzwnLCAnXicsICd2J307CmludCBMeFtdID0gezIsIDIsIC0yLCAtMiwgMSwgMSwgLTEsIC0xfTsKaW50IEx5W10gPSB7MSwgLTEsIDEsIC0xLCAyLCAtMiwgMiwgLTJ9Owpjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xLjApOwojZGVmaW5lIGVsICdcbicKY29uc3QgbGwgbW9kID0gMWU5ICsgNywgTiA9IDJlNSArIDUsIE9PID0gMHgzZjNmM2YzZjsKCmJvb2wgY21wKHBhaXI8aW50LCBzdHJpbmc+JmEsIHBhaXI8aW50LCBzdHJpbmc+JmIpIHsKICAgIGlmIChhLmZpcnN0ICE9IGIuZmlyc3QpCiAgICAgICAgcmV0dXJuIGEuZmlyc3QgPiBiLmZpcnN0OwogICAgZWxzZQogICAgICAgIHJldHVybiBhLnNlY29uZCA8IGIuc2Vjb25kOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47IGNpbiA+PiBuOwogICAgY2luLmlnbm9yZSgpOwogICAgc2V0PHN0cmluZz4gczsKICAgIHZlY3RvcjxzdHJpbmc+IHY7CiAgICBtYXA8c3RyaW5nLCBpbnQ+IG1wOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBzdHJpbmcgeDsKICAgICAgICBnZXRsaW5lKGNpbiwgeCk7CiAgICAgICAgaWYgKGlzdXBwZXIoeFswXSkpIHsKICAgICAgICAgICAgZm9yIChhdXRvICZqIDogcykgewogICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soaik7CiAgICAgICAgICAgICAgICBtcFtqXSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHMuY2xlYXIoKTsKICAgICAgICAgICAgdi5wdXNoX2JhY2soeCk7CiAgICAgICAgfQogICAgICAgIGVsc2Ugcy5pbnNlcnQoeCk7CiAgICB9CiAgICBmb3IgKGF1dG8gJmogOiBzKSB7CiAgICAgICAgdi5wdXNoX2JhY2soaik7CiAgICAgICAgbXBbal0rKzsKICAgIH0KICAgIHZlY3RvcjxwYWlyPGludCwgc3RyaW5nPj4gYW5zOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CiAgICAgICAgc3RyaW5nIHggPSB2W2ldOwogICAgICAgIGludCBjID0gMDsKICAgICAgICB3aGlsZSAoaSArIDEgPCB2LnNpemUoKSAmJiBpc2xvd2VyKHZbaSArIDFdWzBdKSkgewogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGlmIChtcFt2W2ldXSA9PSAxKQogICAgICAgICAgICAgICAgYysrOwogICAgICAgIH0KICAgICAgICBhbnMucHVzaF9iYWNrKHtjLCB4fSk7CiAgICB9CiAgICBzb3J0KGFucy5iZWdpbigpLCBhbnMuZW5kKCksIGNtcCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFucy5zaXplKCk7IGkrKykKICAgICAgICBjb3V0IDw8IGFuc1tpXS5zZWNvbmQgPDwgJyAnIDw8IGFuc1tpXS5maXJzdCA8PCBlbDsKfQoKaW50IG1haW4oKSB7IFNhbXVyYWkKICAgIGZyZW9wZW4oImNvYWNoZXMuaW4iLCAiciIsIHN0ZGluKTsKICAgIGludCBfdCA9IDE7IGNpbiA+PiBfdDsKICAgIGNpbi5pZ25vcmUoKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IF90OyBpKyspewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==