#include <iostream>
#include <cstring>
using namespace std;
int main() {
int t; //test case
scanf("%d",&t);
while(t>0)
{
int n,i,k,l,j,val,tl,m; // n-no of names i=no of new names k-
// l-length of original string val - final value
//tl - length of string in names list
i=0;
val=0;
scanf("%d",&n);
char a[100][20];
while(n>0)
{ // printf("\n taking name %d\n",n);
char s[20];
char vote;
scanf("%s %c",&s,&vote);
l=strlen(s);
if(i==0)
{
strcpy(a[i],s);
a[i][l]=vote;
// printf("first value %s and add %c",a[i],s[l-1]);
if(vote=='+')
val=1;
else
val=-1;
i++;
}
else
{
//char b[20];
//for(j=0;j<(l-2);j++)
// b[j]=s[j];
for(j=0;j<=i;j++)
{
tl=strlen(a[i])-1;
k=0;
if(tl==l)
for(m=0;m<l;m++)
{ if(a[j][m]!=s[m])
{
k=1;
break;
}
}
if(k==0)
break;
}
if(j>i) // no match found
{
i++;
strcpy(a[i],s);
a[i][l]=vote;
if(vote=='+')
val+=1;
else
val-=1;
}
else // match found
{//printf("matches %s\n",a[j]);
if( a[j][l-1]=='+')
val-=1;
else
val+=1;
if(vote=='+')
val+=1;
else
val-=1;
a[j][l-1]=vote;
}
}
n--;
// printf("value till now=%d\n",val);
}
//printf("\n test done for %d\n",t);
printf("%d\n",val);
t--;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBtYWluKCkgewoJaW50IHQ7IC8vdGVzdCBjYXNlCglzY2FuZigiJWQiLCZ0KTsKCXdoaWxlKHQ+MCkKCSB7CgkgICBpbnQgbixpLGssbCxqLHZhbCx0bCxtOyAgICAgICAvLyBuLW5vIG9mIG5hbWVzICBpPW5vIG9mIG5ldyBuYW1lcyBrLQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbC1sZW5ndGggb2Ygb3JpZ2luYWwgc3RyaW5nIHZhbCAtIGZpbmFsIHZhbHVlCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RsIC0gbGVuZ3RoIG9mIHN0cmluZyBpbiBuYW1lcyBsaXN0CgkgICBpPTA7CgkgICB2YWw9MDsKCSAgIHNjYW5mKCIlZCIsJm4pOwoJICAgY2hhciBhWzEwMF1bMjBdOwoJICAgd2hpbGUobj4wKQoJICAgeyAvLyBwcmludGYoIlxuIHRha2luZyBuYW1lICVkXG4iLG4pOwoJICAgY2hhciBzWzIwXTsKCSAgIGNoYXIgdm90ZTsKCSAgIHNjYW5mKCIlcyAlYyIsJnMsJnZvdGUpOwoJICAgbD1zdHJsZW4ocyk7CgkgICBpZihpPT0wKQoJICAgICB7CgkgICAgICAgc3RyY3B5KGFbaV0scyk7CgkgICAgICAgYVtpXVtsXT12b3RlOwoJICAgICAgLy8gcHJpbnRmKCJmaXJzdCB2YWx1ZSAlcyBhbmQgYWRkICVjIixhW2ldLHNbbC0xXSk7CgkgICAgICAgaWYodm90ZT09JysnKQoJICAgICAgICAgIHZhbD0xOwoJICAgICAgIGVsc2UKCSAgICAgICAgICB2YWw9LTE7CgkgICAgICAgaSsrOwoJICAgICB9CgkgICBlbHNlCgkgICAgewoJICAgICAgIC8vY2hhciBiWzIwXTsKCSAgICAgICAvL2ZvcihqPTA7ajwobC0yKTtqKyspCgkgICAgICAgIC8vICBiW2pdPXNbal07CgkgICAgICAgZm9yKGo9MDtqPD1pO2orKykgICAKCSAgICAgICAgeyAKCSAgICAgICAgdGw9c3RybGVuKGFbaV0pLTE7CgkgICAgICAgIGs9MDsKCSAgICAgICAgaWYodGw9PWwpCgkgICAgICAgICAgZm9yKG09MDttPGw7bSsrKQogICAgICAgICAgICAgICAgeyBpZihhW2pdW21dIT1zW21dKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaz0xOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmKGs9PTApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGo+aSkgICAgICAgLy8gbm8gbWF0Y2ggZm91bmQKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICBzdHJjcHkoYVtpXSxzKTsKICAgICAgICAgICAgICAgIGFbaV1bbF09dm90ZTsKICAgICAgICAgICAgICAgIGlmKHZvdGU9PScrJykKCSAgICAgICAgICAgICAgdmFsKz0xOwoJICAgICAgICAgICAgZWxzZQoJICAgICAgICAgICAgIHZhbC09MTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBmb3VuZAogICAgICAgICAgICAgIHsvL3ByaW50ZigibWF0Y2hlcyAlc1xuIixhW2pdKTsKICAgICAgICAgICAgICAgIGlmKCBhW2pdW2wtMV09PScrJykKICAgICAgICAgICAgICAgICAgdmFsLT0xOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICB2YWwrPTE7CiAgICAgICAgICAgICAgICBpZih2b3RlPT0nKycpCgkgICAgICAgICAgICAgIHZhbCs9MTsKCSAgICAgICAgICAgIGVsc2UKCSAgICAgICAgICAgICB2YWwtPTE7CgkgICAgICAgICAgICBhW2pdW2wtMV09dm90ZTsKIAogICAgICAgICAgICAgIH0KIAoJICAgIH0KCSAgICBuLS07CgkgICAvLyBwcmludGYoInZhbHVlIHRpbGwgbm93PSVkXG4iLHZhbCk7CgkgICB9IAoJICAgLy9wcmludGYoIlxuIHRlc3QgZG9uZSBmb3IgJWRcbiIsdCk7CgkgICBwcmludGYoIiVkXG4iLHZhbCk7CgkgICB0LS07ICAKCSB9CglyZXR1cm4gMDsKfQ==