如果兩字符串有相同的字母,那麼他們相等;
如果這兩個字符串和第三個字符串相等 ,那麼這兩個字符串也相等
int n,m,t;
int i,j,k;
bool vis[30];
int fa[30];
int Find(int son){ return fa[son]==son ? fa[son] : fa[son]=Find(fa[son]) ; }
void Union(int x,int y){
x = Find(x); y = Find(y);
if( x != y ) fa[y] = x;
//if( Find(x) != Find(y) ) fa[y] = x; 一開始只寫這句,莫名其妙就 WRONG 了
}
int main()
{
IOS;
while( cin>>n ){
for( i=1 ; i<=30 ; i++ ) fa[i]=i;
for( k=1 ; k<=n ; k++ ){
string s; cin >> s;
int len=s.size();
for( i=0 ; i<len-1 ; i++ ){ //將一個單詞的所有字母連接起來
vis[ s[i] - 'a' + 1 ] = 1;
int x = s[i] - 'a' + 1;
int y = s[i+1] - 'a' + 1;
Union(x,y);
}
vis[ s[len-1] -'a' + 1 ] = 1;
}
int ans=0;
for(i=1;i<=26;i++) if( fa[i]==i && vis[i] ) ans++;
cout<<ans<<endl;
}
return 0 ;
}