/*
g:图的邻接矩阵存储
visited:判断结点是否被访问
v:存储匹配的点
nl,nr:分别为图的右部,左部的结点个数
*/
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 400;
int g[MAXN][MAXN], visited[MAXN], v[MAXN];
int nl,nr;
int dfs(int l)
{
int i;
for(i=1; i<=nr; i++)
{
if(!visited[i] && g[l][i])
{
visited[i] = 1;
if(-1 == v[i] || dfs(v[i]))
{
v[i] = l;
return 1;
}
}
}
return 0;
}
int Max()
{
memset(v, -1, sizeof(v));
int ans = 0;
for(int i=1; i<=nl; i++)
{
memset(visited, 0, sizeof(visited));
ans += dfs(i);
}
return ans;
}
int main()
{
//图的录入
int nAns = Max();
return 0;
}