//BISMILLAHIRRAHMANIRRAHIM
/*
manus tar shopner soman boro
Author :: Shakil Ahmed
.............AUST_CSE27.........
prob ::
Type ::
verdict::
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <limits.h>
#include <set>
#include <algorithm>
#include <iostream>
#include <vector>
#include <stack>
#include <string>
#include <list>
#include <map>
#include <queue>
#include <sstream>
#include <utility>
#define pb push_back
#define mp make_pair
#define pi acos(-1.0)
#define ff first
#define LL long long
#define ss second
#define rep(i,n) for(i = 0; i < n; i++)
#define REP(i,n) for(i=n;i>=0;i--)
#define FOR(i,a,b) for(int i = a; i <= b; i++)
#define ROF(i,a,b) for(int i = a; i >= b; i--)
#define re return
#define QI queue<int>
#define SI stack<int>
#define pii pair <int,int>
#define MAX
#define MOD
#define INF 1<<30
#define SZ(x) ((int) (x).size())
#define ALL(x) (x).begin(), (x).end()
#define sqr(x) ((x) * (x))
#define memo(a,b) memset((a),(b),sizeof(a))
#define G() getchar()
#define MAX3(a,b,c) max(a,max(b,c))
double const EPS=3e-8;
using namespace std;
template< class T > T gcd(T a, T b) { return (b != 0 ? gcd<T>(b, a%b) : a); }
template< class T > T lcm(T a, T b) { return (a / gcd<T>(a, b) * b); }
template <class T> inline T bigmod(T p,T e,T M)
{
if(e==0)return 1;
if(e%2==0){LL t=bigmod(p,e/2,M);return (T)((t*t)%M);}
return (T)((LL)bigmod(p,e-1,M)*(LL)p)%M;
}
template <class T> inline T modinverse(T a,T M){return bigmod(a,M-2,M);}
//Fast Reader
template<class T>inline bool read(T &x){int c=getchar();int sgn=1;while(~c&&c<'0'||c>'9'){if(c=='-')sgn=-1;c=getchar();}for(x=0;~c&&'0'<=c&&c<='9';c=getchar())x=x*10+c-'0'; x*=sgn; return ~c;}
/* ************************************** My code start here ****************************************** */
int par[30];
void Initialization(int n)
{
int i ;
for ( i = 0 ; i <= n ; i++ ) par[i] = i ;
}
int find_parent(int x)
{
if(par[x]==x) return x;
return par[x] = find_parent(par[x]);
}
void Make_Union(int x , int y)
{
par[find_parent(x)] = find_parent(y);
}
bool isUnion(int x , int y)
{
return find_parent(x)==find_parent(y);
}
int main()
{
int t,i , cs;
bool space = false;
scanf("%d",&t);
getchar();
for ( cs = 1 ; cs <= t ; cs++ , space = 1)
{ if(space) printf("\n");
char lim;
string str;
int i ;
cin>>lim;
getchar();
Initialization(lim-'A');
int ans = lim-'A' + 1;
while(getline(cin,str) && str!="")
{
int x = str[0]-'A';
int y = str[1]-'A';
if(!isUnion(x,y)) Make_Union(x,y) , ans-- ;
}
cout<<ans<<endl;
}
return 0;
}
CgogLy9CSVNNSUxMQUhJUlJBSE1BTklSUkFISU0KLyoKIG1hbnVzIHRhciBzaG9wbmVyIHNvbWFuIGJvcm8KIEF1dGhvciA6OiBTaGFraWwgQWhtZWQKLi4uLi4uLi4uLi4uLkFVU1RfQ1NFMjcuLi4uLi4uLi4KIHByb2IgICA6OgogVHlwZSAgIDo6CiB2ZXJkaWN0OjoKICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHV0aWxpdHk+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGkgYWNvcygtMS4wKQojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgTEwgbG9uZyBsb25nCiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgcmVwKGksbikgZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQojZGVmaW5lIFJFUChpLG4pIGZvcihpPW47aT49MDtpLS0pCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGkgPSBhOyBpIDw9IGI7IGkrKykKI2RlZmluZSBST0YoaSxhLGIpIGZvcihpbnQgaSA9IGE7IGkgPj0gYjsgaS0tKQojZGVmaW5lIHJlIHJldHVybgojZGVmaW5lIFFJIHF1ZXVlPGludD4KI2RlZmluZSBTSSBzdGFjazxpbnQ+CiNkZWZpbmUgcGlpIHBhaXIgPGludCxpbnQ+CiNkZWZpbmUgTUFYCiNkZWZpbmUgTU9ECiNkZWZpbmUgSU5GIDE8PDMwCiNkZWZpbmUgU1ooeCkgKChpbnQpICh4KS5zaXplKCkpCiNkZWZpbmUgQUxMKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBzcXIoeCkgKCh4KSAqICh4KSkKI2RlZmluZSBtZW1vKGEsYikgbWVtc2V0KChhKSwoYiksc2l6ZW9mKGEpKQojZGVmaW5lIEcoKSBnZXRjaGFyKCkKI2RlZmluZSBNQVgzKGEsYixjKSBtYXgoYSxtYXgoYixjKSkKCmRvdWJsZSBjb25zdCBFUFM9M2UtODsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgp0ZW1wbGF0ZTwgY2xhc3MgVCA+IFQgZ2NkKFQgYSwgVCBiKSB7IHJldHVybiAoYiAhPSAwID8gZ2NkPFQ+KGIsIGElYikgOiBhKTsgfQp0ZW1wbGF0ZTwgY2xhc3MgVCA+IFQgbGNtKFQgYSwgVCBiKSB7IHJldHVybiAoYSAvIGdjZDxUPihhLCBiKSAqIGIpOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgVCBiaWdtb2QoVCBwLFQgZSxUIE0pCnsKICAgIGlmKGU9PTApcmV0dXJuIDE7CiAgICBpZihlJTI9PTApe0xMIHQ9YmlnbW9kKHAsZS8yLE0pO3JldHVybiAoVCkoKHQqdCklTSk7fQogICAgcmV0dXJuIChUKSgoTEwpYmlnbW9kKHAsZS0xLE0pKihMTClwKSVNOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgbW9kaW52ZXJzZShUIGEsVCBNKXtyZXR1cm4gYmlnbW9kKGEsTS0yLE0pO30KLy9GYXN0IFJlYWRlcgp0ZW1wbGF0ZTxjbGFzcyBUPmlubGluZSBib29sIHJlYWQoVCAmeCl7aW50IGM9Z2V0Y2hhcigpO2ludCBzZ249MTt3aGlsZSh+YyYmYzwnMCd8fGM+JzknKXtpZihjPT0nLScpc2duPS0xO2M9Z2V0Y2hhcigpO31mb3IoeD0wO35jJiYnMCc8PWMmJmM8PSc5JztjPWdldGNoYXIoKSl4PXgqMTArYy0nMCc7IHgqPXNnbjsgcmV0dXJuIH5jO30KCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBNeSBjb2RlIHN0YXJ0IGhlcmUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCmludCBwYXJbMzBdOwp2b2lkIEluaXRpYWxpemF0aW9uKGludCBuKQp7CiAgICBpbnQgaSA7CiAgICBmb3IgKCBpID0gMCA7IGkgPD0gbiA7IGkrKyApIHBhcltpXSA9IGkgOwp9CmludCBmaW5kX3BhcmVudChpbnQgeCkKewogICAgaWYocGFyW3hdPT14KSByZXR1cm4geDsKICAgIHJldHVybiBwYXJbeF0gPSBmaW5kX3BhcmVudChwYXJbeF0pOwp9CnZvaWQgTWFrZV9VbmlvbihpbnQgeCAsIGludCB5KQp7CiAgICBwYXJbZmluZF9wYXJlbnQoeCldID0gZmluZF9wYXJlbnQoeSk7Cn0KYm9vbCBpc1VuaW9uKGludCB4ICwgaW50IHkpCnsKICAgIHJldHVybiBmaW5kX3BhcmVudCh4KT09ZmluZF9wYXJlbnQoeSk7Cn0KaW50IG1haW4oKQp7CiAgICAgaW50IHQsaSAsIGNzOwoKICAgIGJvb2wgc3BhY2UgPSBmYWxzZTsKCiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIGdldGNoYXIoKTsKICAgIGZvciAoIGNzID0gMSA7IGNzIDw9IHQgOyBjcysrICwgc3BhY2UgPSAxKQogICAgeyAgICBpZihzcGFjZSkgcHJpbnRmKCJcbiIpOwogICAgICAgICBjaGFyIGxpbTsKICAgICAgICAgc3RyaW5nIHN0cjsKICAgICAgICAgaW50IGkgOwogICAgICAgIGNpbj4+bGltOwogICAgICAgIGdldGNoYXIoKTsKICAgICAgICBJbml0aWFsaXphdGlvbihsaW0tJ0EnKTsKICAgICAgICBpbnQgYW5zID0gbGltLSdBJyArIDE7CiAgICAgICAgd2hpbGUoZ2V0bGluZShjaW4sc3RyKSAmJiBzdHIhPSIiKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHggPSBzdHJbMF0tJ0EnOwogICAgICAgICAgICBpbnQgeSA9IHN0clsxXS0nQSc7CiAgICAgICAgICAgIGlmKCFpc1VuaW9uKHgseSkpIE1ha2VfVW5pb24oeCx5KSAsIGFucy0tIDsKCiAgICAgICAgfQogICAgICAKICAgICAgICBjb3V0PDxhbnM8PGVuZGw7CgoKICAgIH0KICAgcmV0dXJuIDA7Cn0K