#include<iostream>
#include<vector>
#include<string>
using namespace std;
int h(const string& s)
{
int len = s.length();
int temp = 0;
int myascii;
for(int i=0; i<len; i++)
myascii = s[i], temp+=(myascii*(i+1));
return temp*19;
}
int Hash(const string& st)
{
int ans = h(st)%101;
return ans;
}
int main()
{
int t;
cin>>t;
while(t--)
{
vector<string> V(101);
for(int k=0; k<101; k++)
V[k] = "";
int n;
cin>>n;
cin.get();
int counter = 0;
while(n--)
{
string ip;
getline(cin, ip);
int l = ip.length()-1;
string str = ip.substr(4, l);
string task = ip.substr(0, 3);
int hk = Hash(str);
if(task == "ADD")
{
for(int j=0; j<=19; j++)
{
int pos = (hk + j*j + 23*j)%101;
if(V[pos] == str)
break;
else if(V[pos] == "")
{
V[pos] = str;
counter++;
break;
}
}
}
else
{
for(int j=0; j<=19; j++)
{
int pos = (hk + j*j + 23*j)%101;
if(V[pos] == str)
{
V[pos] = "";
counter--;
break;
}
}
}
}
cout<<counter<<endl;
for(int r=0; r<101; r++)
{
if(V[r] != "")
cout<<r<<":"<<V[r]<<endl;
}
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGgoY29uc3Qgc3RyaW5nJiBzKQp7CiAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKICAgIGludCB0ZW1wID0gMDsKICAgIGludCBteWFzY2lpOwogICAgZm9yKGludCBpPTA7IGk8bGVuOyBpKyspCiAgICAgICAgbXlhc2NpaSA9IHNbaV0sIHRlbXArPShteWFzY2lpKihpKzEpKTsKICAgIHJldHVybiB0ZW1wKjE5Owp9CgppbnQgSGFzaChjb25zdCBzdHJpbmcmIHN0KQp7CiAgICBpbnQgYW5zID0gaChzdCklMTAxOwogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICB2ZWN0b3I8c3RyaW5nPiBWKDEwMSk7CiAgICAgICAgZm9yKGludCBrPTA7IGs8MTAxOyBrKyspCiAgICAgICAgICAgIFZba10gPSAiIjsKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4+Pm47CiAgICAgICAgY2luLmdldCgpOwogICAgICAgIGludCBjb3VudGVyID0gMDsKICAgICAgICB3aGlsZShuLS0pCiAgICAgICAgewogICAgICAgICAgICBzdHJpbmcgaXA7CiAgICAgICAgICAgIGdldGxpbmUoY2luLCBpcCk7CiAgICAgICAgICAgIGludCBsID0gaXAubGVuZ3RoKCktMTsKICAgICAgICAgICAgc3RyaW5nIHN0ciA9IGlwLnN1YnN0cig0LCBsKTsKICAgICAgICAgICAgc3RyaW5nIHRhc2sgPSBpcC5zdWJzdHIoMCwgMyk7CiAgICAgICAgICAgIGludCBoayA9IEhhc2goc3RyKTsKICAgICAgICAgICAgaWYodGFzayA9PSAiQUREIikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBqPTA7IGo8PTE5OyBqKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IHBvcyA9IChoayArIGoqaiArIDIzKmopJTEwMTsKICAgICAgICAgICAgICAgICAgICBpZihWW3Bvc10gPT0gc3RyKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKFZbcG9zXSA9PSAiIikKICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWW3Bvc10gPSBzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IoaW50IGo9MDsgajw9MTk7IGorKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gKGhrICsgaipqICsgMjMqaiklMTAxOwogICAgICAgICAgICAgICAgICAgIGlmKFZbcG9zXSA9PSBzdHIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBWW3Bvc10gPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlci0tOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY291dDw8Y291bnRlcjw8ZW5kbDsKICAgICAgICBmb3IoaW50IHI9MDsgcjwxMDE7IHIrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKFZbcl0gIT0gIiIpCiAgICAgICAgICAgICAgICBjb3V0PDxyPDwiOiI8PFZbcl08PGVuZGw7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0K