bool find(int u)
{
flag[u]=1;
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(!flag[v])
{
flag[v]=1;
if(match[v]==0||find(match[v]))
{
match[v]=u;
return true;
}
}
}
return false;
}
int function()
{
int ans=0;
memset(match,0,sizeof(match));
for(int i=1;i<=n;i++)
{
memset(flag,0,sizeof(flag));
if(find(i))ans++;
}
return ans;
}