#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int inf = 1000 * 1000 * 1000;
typedef vector<int> vec;
typedef vector<vec> graph;
int main()
{
//input your graph
int n = 6;
graph c(n, vec(n));
c[0][1] = 11;
c[0][2] = 11;
c[1][3] = 4;
c[1][4] = 8;
c[1][2] = 3;
c[2][4] = 9;
c[3][5] = 10;
c[4][3] = 6;
c[4][5] = 10;
// Search wide (poisk v shirinu), searching lowest way
graph f(n, vec(n));
for (;;)
{
vec from(n, -1);
queue<int> q;
q.push(0);
from[0] = 0;
for (int cur; !q.empty();)
{
cur = q.front();
q.pop();
for (int v = 0; v < n; v++)
if (from[v] == -1 && c[cur][v] - f[cur][v] > 0)
{
q.push(v);
from[v] = cur;
}
}
if (from[n - 1] == -1)
break;
int cf = inf;
//MaxFlow
for (int cur = n - 1; cur != 0; )
{
int prev = from[cur];
cf = min(cf, c[prev][cur] - f[prev][cur]);
cur = prev;
}
for (int cur = n - 1; cur != 0; )
{
int prev = from[cur];
f[prev][cur] += cf;
f[cur][prev] -= cf;
cur = prev;
}
}
int MaxFlow = 0;
for (int i = 0; i < n; i++)
if (c[0][i] != 0)
MaxFlow += f[0][i];
cout << MaxFlow << endl;
}
CgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxxdWV1ZT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgaW5mID0gMTAwMCAqIDEwMDAgKiAxMDAwOwoKdHlwZWRlZiB2ZWN0b3I8aW50PiB2ZWM7CnR5cGVkZWYgdmVjdG9yPHZlYz4gZ3JhcGg7CgoKaW50IG1haW4oKQp7CgkvL2lucHV0IHlvdXIgZ3JhcGgKCWludCBuID0gNjsKCWdyYXBoIGMobiwgdmVjKG4pKTsKCgljWzBdWzFdID0gMTE7CgljWzBdWzJdID0gMTE7CgljWzFdWzNdID0gNDsKCWNbMV1bNF0gPSA4OwoJY1sxXVsyXSA9IDM7CgljWzJdWzRdID0gOTsKCWNbM11bNV0gPSAxMDsKCWNbNF1bM10gPSA2OwoJY1s0XVs1XSA9IDEwOwoKCS8vIFNlYXJjaCB3aWRlIChwb2lzayB2IHNoaXJpbnUpLCBzZWFyY2hpbmcgbG93ZXN0IHdheQoJZ3JhcGggZihuLCB2ZWMobikpOwoKCWZvciAoOzspCgl7CgoJCXZlYyBmcm9tKG4sIC0xKTsKCQlxdWV1ZTxpbnQ+IHE7CgkJCgkJcS5wdXNoKDApOwoJCWZyb21bMF0gPSAwOwoKCQlmb3IgKGludCBjdXI7ICFxLmVtcHR5KCk7KQoJCXsKCQkJY3VyID0gcS5mcm9udCgpOwoJCQlxLnBvcCgpOwoJCQlmb3IgKGludCB2ID0gMDsgdiA8IG47IHYrKykKCQkJCWlmIChmcm9tW3ZdID09IC0xICYmIGNbY3VyXVt2XSAtIGZbY3VyXVt2XSA+IDApCgkJCQl7CgkJCQkJcS5wdXNoKHYpOwoJCQkJCWZyb21bdl0gPSBjdXI7CgkJCQl9CgkJfQoKCQlpZiAoZnJvbVtuIC0gMV0gPT0gLTEpCgkJCWJyZWFrOwoKCQlpbnQgY2YgPSBpbmY7CgkJCgkJLy9NYXhGbG93CgoJCWZvciAoaW50IGN1ciA9IG4gLSAxOyBjdXIgIT0gMDsgKQoJCXsKCQkJaW50IHByZXYgPSBmcm9tW2N1cl07CgkJCWNmID0gbWluKGNmLCBjW3ByZXZdW2N1cl0gLSBmW3ByZXZdW2N1cl0pOwoJCQljdXIgPSBwcmV2OwoJCX0KCgkJZm9yIChpbnQgY3VyID0gbiAtIDE7IGN1ciAhPSAwOyApCgkJewoJCQlpbnQgcHJldiA9IGZyb21bY3VyXTsKCQkJZltwcmV2XVtjdXJdICs9IGNmOwoJCQlmW2N1cl1bcHJldl0gLT0gY2Y7CgkJCWN1ciA9IHByZXY7CgkJfQoKCX0KCglpbnQgTWF4RmxvdyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQlpZiAoY1swXVtpXSAhPSAwKQoJCQlNYXhGbG93ICs9IGZbMF1baV07CgoJY291dCA8PCBNYXhGbG93IDw8IGVuZGw7Cn0K