#include <bits/stdc++.h>
using namespace std;
typedef int weight_t;
const int SIZE_E = //500;
const int SIZE_V = //205;
int Start,End;
struct edge_t{
int node;
weight_t c;
edge_t *next;
edge_t *redge;
}Edge[SIZE_E];
int Ecnt = 0;
edge_t *Ver[SIZE_V] ;
void init(){
Ecnt = 0;
memset(Ver,0,sizeof(Ver));
}
void mkEdge(int a,int b,weight_t c){
int t1 = Ecnt++;
int t2 = Ecnt++;
Edge[t1].node = b;
Edge[t1].c = c;
Edge[t1].next = Ver[a];
Edge[t1].redge = Edge + t2;
Ver[a] = Edge + t1;
Edge[t2].node = a;
Edge[t2].c = 0;
Edge[t2].next = Ver[b];
Edge[t2].redge = Edge + t1;
Ver[b] = Edge + t2;
}
bool flag[SIZE_V];
//
int DFS(int u,int f){
if ( u == End) return f;
flag[u] = true;
for (edge_t *p = Ver[u]; p ; p = p->next){
int v = p->node;
if ( flag[v] ) continue;
weight_t c = p->c;
if (c > 0){
int t = DFS(v,min(c,f));
if (t == 0)continue;
p->c -= t;
p->redge->c += t;
return t;
}
}
return 0;
}
int solve(){
int ret = 0;
while( 1 ){
memset(flag,false,sizeof(flag));
int t = DFS(Start,INT_MAX);
if ( 0 == t )return ret;
ret += t;
}
}
--