#include <bits/stdc++.h>
#ifdef ONLINE_JUDGE
	#define out(x)
#else
	#define out(x) cerr<<#x"="<<(x)<<endl
#endif
using namespace std;
typedef long long LL;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
#define REP(i,n) for(int i=0; i<int(n); i++)
#define pb push_back
#define mp make_pair
#define X first
#define Y second
char buf[123];
map<string, int> id;
map<string, int>::iterator it;
char tp[27];
int u[27], v[27];
int read_id(int &u){
	scanf("%s",buf);
	it=id.find(buf);
	int t=id.size();
	if(it==id.end())u=id[buf]=t;
	else u=it->Y;
}
bool ok[27];
int deg[57], s[57], n, ans;
int fi(int x){
	if(x==s[x])return x;
	return s[x]=fi(s[x]);
}
void link(int u, int v){
	u=fi(u); v=fi(v);
	s[u]=v;
}
vi E[57];
bool check(){
	int N=id.size();
	REP(i,N){
		s[i]=i;
		E[i].clear();
		deg[i]=0;
	}
	int cnt=0;
	REP(i,n)if(ok[i]&&tp[i]=='L')
		link(u[i], v[i]);
	REP(i,n)if(ok[i]&&tp[i]=='A'){
		if(fi(u[i])==fi(v[i]))return 0;
		E[fi(u[i])].pb(fi(v[i]));
		deg[fi(v[i])]++;
	}
	queue<int> q;
	REP(i,N)if(deg[i]==0)q.push(i);
	while(!q.empty()){
		++cnt;
		int x=q.front();
		q.pop();
		vi &e=E[x];
		REP(i,e.size()){
			if(--deg[e[i]]==0)
				q.push(e[i]);
		}
	}
	return cnt==N;
}
void dfs(int st, int used){
	if(used>=ans)return;
	if(check()){
		ans=min(ans, used);
		return;
	}
	for(int i=st; i<n; ++i){
		ok[i]=0;
		dfs(i+1, used+1);
		ok[i]=1;
	}
}
int main(){
	while(scanf("%d",&n) && n){
		id.clear();
		REP(i,n){
			read_id(u[i]);
			scanf("%s",buf);
			tp[i]=buf[0];
			read_id(v[i]);
			if(tp[i]=='D'){
				swap(u[i], v[i]);
				tp[i]='A';
			}
			ok[i]=1;
		}
		ans=6;
		dfs(0,0);
		printf("%d\n", ans);
	}
}
