#include "bits/stdc++.h"
using namespace std;

bool f[150];
string depname[150];//グループ名
vector<string> member[150];//所属しているメンバ名

vector<string> saiki(int now,int n)
{
	vector<string> ret;
	f[now]=true;
	for(int i=0;i<member[now].size();i++)
	{
		int ind=-1;
		//グループ名を全探索
		for(int j=0;j<n;j++)
		{
			if(now!=j && depname[j]==member[now][i])
				ind=j;
		}
		if(ind==-1)
			ret.push_back(member[now][i]);
		else if(!f[ind]){
			vector<string> ketu=saiki(ind,n);
			for(int j=0;j<ketu.size();j++)
				ret.push_back(ketu[j]);
		}
	}
	return ret;
}

int main()
{
	while(1)
	{
		int n;
		string s[150];
		for(int i=0;i<150;i++)
			member[i].clear();
		vector<string> ans;
		fill(f,f+150,false);
		cin>>n;
		if(n==0)
			break;
		for(int i=0;i<n;i++)
			cin>>s[i];
		
		//depnameとmemberを求める
		for(int i=0;i<n;i++)
		{
			string tmp;
			int j=0;
			while(s[i][j]!=':')
			{
				tmp+=s[i][j];
				j++;
			}
			depname[i]=tmp;
			j++;
			while(j<s[i].size())
			{
				tmp="";
				while(s[i][j]!=',' && s[i][j]!='.')
				{
					tmp+=s[i][j];
					j++;
				}
				member[i].push_back(tmp);
				j++;
			}
		}
		
		//ここから処理
		//再帰でメンバ一覧を得る
		ans=saiki(0,n);
		sort(ans.begin(),ans.end());
		auto res=unique(ans.begin(),ans.end());
		ans.erase(res,ans.end());
		/*
		for(int i=0;i<ans.size();i++)
			cerr<<ans[i]<<endl;
			*/
		cout<<ans.size()<<endl;
	}
	return 0;
}
