//本题的题目大意是:给G个girl和B个boy 然后给出M个配对..表示女孩i和男孩J互相认识.并且女孩和女孩之间是相互认识的
//男孩与男孩之间是相互认识的..求找到一个最大的集合..集合里面的每个人都互相认识.
//做法:把不认识的标记为1,认识的标记为0,那么这个结果就是该二分图的最大独立点集.
//最大独立点集的概念:找出一个集合..集合内部的每个点都不互相有边连接..
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<vector>
const int inf = 0x3f3f3f;
const int MN = 220;
using namespace std;
int ppx[MN],ppy[MN],G,B,M;
bool mk[MN],map[MN][MN];
bool path(int x)
{
for(int i = 1 ; i <= B ; i++)
{
if(map[x][i] && !mk[i])
{
mk[i] = 1;
if(ppy[i] == -1 || path(ppy[i]))
return 1;
}
}
return 0;
}
int Maxmatch()
{
int ans = 0;
memset(ppx,0xff,sizeof(ppx));
memset(ppy,0xff,sizeof(ppy));
for(int i = 1 ; i <= G ; i++)
{
if(ppx[i] == -1)
{
memset(mk,0,sizeof(mk));
ans += path(i);
}
}
return ans;
}
int main()
{
int t = 0;
while(scanf("%d%d%d",&G,&B,&M) && G+B+M != 0)
{
t++;
for(int i = 1 ; i <= G ; i++)
{
for(int j = 1 ; j <= B ; j++)
map[i][j] = 1;
}
int x,y;
for(int i = 1 ; i <= M ; i++)
{
scanf("%d%d",&x,&y);
map[x][y] = 0;
}
int ans = Maxmatch();
printf("Case %d: %d\n",t,G+B-ans);
}
}
//男孩与男孩之间是相互认识的..求找到一个最大的集合..集合里面的每个人都互相认识.
//做法:把不认识的标记为1,认识的标记为0,那么这个结果就是该二分图的最大独立点集.
//最大独立点集的概念:找出一个集合..集合内部的每个点都不互相有边连接..
//那么返回标记的1状态的话..就可以表示为每个点都有一条边与其它的点相连..就是ans
//最大匹配数=最小点覆盖=n-最大点独立集
//题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2458
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<vector>
const int inf = 0x3f3f3f;
const int MN = 220;
using namespace std;
int ppx[MN],ppy[MN],G,B,M;
bool mk[MN],map[MN][MN];
bool path(int x)
{
for(int i = 1 ; i <= B ; i++)
{
if(map[x][i] && !mk[i])
{
mk[i] = 1;
if(ppy[i] == -1 || path(ppy[i]))
return 1;
}
}
return 0;
}
int Maxmatch()
{
int ans = 0;
memset(ppx,0xff,sizeof(ppx));
memset(ppy,0xff,sizeof(ppy));
for(int i = 1 ; i <= G ; i++)
{
if(ppx[i] == -1)
{
memset(mk,0,sizeof(mk));
ans += path(i);
}
}
return ans;
}
int main()
{
int t = 0;
while(scanf("%d%d%d",&G,&B,&M) && G+B+M != 0)
{
t++;
for(int i = 1 ; i <= G ; i++)
{
for(int j = 1 ; j <= B ; j++)
map[i][j] = 1;
}
int x,y;
for(int i = 1 ; i <= M ; i++)
{
scanf("%d%d",&x,&y);
map[x][y] = 0;
}
int ans = Maxmatch();
printf("Case %d: %d\n",t,G+B-ans);
}
}