#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int M=510; int m,n; int map[M][M], match[M], chk[M]; int dfs(int p) { int i; for(i=1;i<=m;i++) if( map[p][i] && chk[i]==0 ) { chk[i]=1; if( match[i]==0 || dfs( match[i] ) ) { match[i]=p; return 1; } } return 0; } int solve() { int i,res; memset(match,0,sizeof(match)); res=0; for(i=1; i<=n; i++) { memset(chk,0,sizeof(chk)); res+=dfs(i); } return res; } int main() { // freopen("in","r",stdin); // freopen("out","w",stdout); int k,i,r,x,y,ans,imp,ca=1; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { memset(map,0,sizeof(map)); for(i=0;i<k;i++) { scanf("%d%d",&x,&y); map[x][y]=1; } ans=solve(); imp=0; for(i=1;i<=n;i++) for(r=1;r<=m;r++) if(map[i][r]) { map[i][r]=0; if(solve()!=ans) imp++; map[i][r]=1; } printf("Board %d have %d important blanks for %d chessmen.\n",ca++, imp, ans); } return 0; }