#include<iostream>
#include<queue>
#define mins(a,b) ((a)>(b))?b:a
#define INF INT_MAX
using namespace std;
int map[250][250],flow[250][250],p[250],f[250];
//map用于记录每条边的最大流量
//folw用于记录已流过该边的流量,同时带有反向弧流量,其值为负
//p用于记录前驱,记录一条增广路径
//f为当次流入点的流量
int EK(int s,int t)
{
int a,b,ans=0,v,u;
queue<int>Q;
while(1)
{
a=s;
while(!Q.empty()) Q.pop();
Q.push(a);
memset(p,0,sizeof(p));
memset(f,0,sizeof(f));
f[s]=INF;
while(!Q.empty())
{
b=Q.front();
Q.pop();
if(b==t)
break;
for(int i=1;i<=n+2;i++)
if(!p[i] && map[b][i]-flow[b][i]>0)//如果当前的残余流量还大于0
{
p[i]=b;
f[i]=mins(map[b][i]-flow[b][i],f[b]);//流入该点的流量取当前残余量与流入量的最小值
Q.push(i);
}
}
if(p[t]==0)
break;
for(v=t;v!=s;v=p[v])//完成一条增广路径的计算,反向弧为负值。
{
u=p[v];
flow[u][v]+=f[t];
flow[v][u]-=f[t];
}
ans+=f[t];
}
return ans;
}
int main()
{
//构建源和汇点,map中各边的流量关系
printf("%d\n",EK(s,t));
return 0;
}