/*
分析:
最大独立集,把小盆友列为两个集合,矛盾是边。
2012-08-02 12:24
*/
分析:
最大独立集,把小盆友列为两个集合,矛盾是边。
2012-08-02 12:24
*/
#include"stdio.h"
#include"string.h"
int chi;
struct node
{
int love;
int heat;
int tot;
int mem[555];
}E[555];
int match[555];
int visit[555];
struct A
{
int t_l;
int l_mem[555];
int t_h;
int h_mem[555];
}ani[222];
int DFS(int k)
{
int i;
for(i=0;i<E[k].tot;i++)
{
if(visit[E[k].mem[i]]) continue;
visit[E[k].mem[i]]=1;
if(match[E[k].mem[i]]==-1 || DFS(match[E[k].mem[i]]))
{
match[E[k].mem[i]]=k;
return 1;
}
}
return 0;
}
int main()
{
int n,m;
int i,l,j;
char str1[10],str2[10];
int f1,f2;
int ans;
while(scanf("%d%d%d",&n,&m,&chi)!=-1)
{
for(i=1;i<=n+m;i++) ani[i].t_h=ani[i].t_l=0;
for(i=1;i<=chi;i++) E[i].tot=0;
for(i=1;i<=chi;i++)
{
scanf("%s%s",str1,str2);
f1=0;
for(l=1;str1[l];l++) {f1*=10;f1+=str1[l]-'0';}
f2=0;
for(l=1;str2[l];l++) {f2*=10;f2+=str2[l]-'0';}
if(str1[0]=='D') f1+=n;
else f2+=n;
E[i].love=f1;
E[i].heat=f2;
ani[f1].l_mem[ani[f1].t_l++]=i;
ani[f2].h_mem[ani[f2].t_h++]=i;
}
for(i=1;i<=chi;i++)
{
E[i].tot=ani[E[i].heat].t_l;
for(l=0;l<E[i].tot;l++) E[i].mem[l]=ani[E[i].heat].l_mem[l];
E[i].tot+=ani[E[i].love].t_h;
for(j=0;l<E[i].tot;l++,j++) E[i].mem[l]=ani[E[i].love].h_mem[j];
}
memset(match,-1,sizeof(match));
ans=0;
for(i=1;i<=chi;i++)
{
memset(visit,0,sizeof(visit));
ans+=DFS(i);
}
printf("%d\n",chi-ans/2);
}
return 0;
}