/*
Copyright 2012 Marek "p2004a" Rusinowski
Edmonds-Karp algorithm
*/
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#define MAXN 10000
#define INF 0x7FFFFFFF
struct edge {
int v, c, p;
edge() {}
edge(int vv, int cc, int pp) : v(vv), c(cc), p(pp) {}
};
std::vector<edge> edges[MAXN];
std::pair<int, int> p[MAXN];
bool vis[MAXN];
int bfs(int s, int t, int n) {
std::queue<int> q;
q.push(s);
std::fill(vis, vis + n, false);
vis[s] = true;
while (!q.empty()) {
int v = q.front();
q.pop();
if (v == t) {
int min = INF;
int x = v;
while (x != s) {
min = std::min(min, edges[p[x].first][p[x].second].c);
x = p[x].first;
}
x = v;
while (x != s) {
edges[p[x].first][p[x].second].c -= min;
edges[x][edges[p[x].first][p[x].second].p].c += min;
x = p[x].first;
}
return min;
}
for (int i = 0; i < (int) edges[v].size(); ++i) {
if (!vis[edges[v][i].v] && edges[v][i].c > 0) {
vis[edges[v][i].v] = true;
q.push(edges[v][i].v);
p[edges[v][i].v] = std::make_pair(v, i);
}
}
}
return 0;
}
int main() {
int n, m, a, b, c, s, t;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; ++i) {
scanf("%d %d %d", &a, &b, &c);
--a, --b;
edges[a].push_back(edge(b, c, edges[b].size()));
edges[b].push_back(edge(a, 0, edges[a].size() - 1));
}
scanf("%d %d", &s, &t);
--s, --t;
int tmp, res = 0;
while (tmp = bfs(s, t, n)) {
res += tmp;
}
printf("%d\n", res);
return 0;
}
LyoKICBDb3B5cmlnaHQgMjAxMiBNYXJlayAicDIwMDRhIiBSdXNpbm93c2tpCiAgRWRtb25kcy1LYXJwIGFsZ29yaXRobQoqLwojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgojZGVmaW5lIE1BWE4gMTAwMDAKI2RlZmluZSBJTkYgMHg3RkZGRkZGRgoKc3RydWN0IGVkZ2UgewogIGludCB2LCBjLCBwOwogIGVkZ2UoKSB7fQogIGVkZ2UoaW50IHZ2LCBpbnQgY2MsIGludCBwcCkgOiB2KHZ2KSwgYyhjYyksIHAocHApIHt9Cn07CgpzdGQ6OnZlY3RvcjxlZGdlPiBlZGdlc1tNQVhOXTsKc3RkOjpwYWlyPGludCwgaW50PiBwW01BWE5dOwpib29sIHZpc1tNQVhOXTsKCmludCBiZnMoaW50IHMsIGludCB0LCBpbnQgbikgewogIHN0ZDo6cXVldWU8aW50PiBxOwogIHEucHVzaChzKTsKICBzdGQ6OmZpbGwodmlzLCB2aXMgKyBuLCBmYWxzZSk7CiAgdmlzW3NdID0gdHJ1ZTsKICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgaW50IHYgPSBxLmZyb250KCk7CiAgICBxLnBvcCgpOwogICAgaWYgKHYgPT0gdCkgewogICAgICBpbnQgbWluID0gSU5GOwogICAgICBpbnQgeCA9IHY7CiAgICAgIHdoaWxlICh4ICE9IHMpIHsKICAgICAgICBtaW4gPSBzdGQ6Om1pbihtaW4sIGVkZ2VzW3BbeF0uZmlyc3RdW3BbeF0uc2Vjb25kXS5jKTsKICAgICAgICB4ID0gcFt4XS5maXJzdDsKICAgICAgfQogICAgICB4ID0gdjsKICAgICAgd2hpbGUgKHggIT0gcykgewogICAgICAgIGVkZ2VzW3BbeF0uZmlyc3RdW3BbeF0uc2Vjb25kXS5jIC09IG1pbjsKICAgICAgICBlZGdlc1t4XVtlZGdlc1twW3hdLmZpcnN0XVtwW3hdLnNlY29uZF0ucF0uYyArPSBtaW47CiAgICAgICAgeCA9IHBbeF0uZmlyc3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbjsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkgZWRnZXNbdl0uc2l6ZSgpOyArK2kpIHsKICAgICAgaWYgKCF2aXNbZWRnZXNbdl1baV0udl0gJiYgZWRnZXNbdl1baV0uYyA+IDApIHsKICAgICAgICB2aXNbZWRnZXNbdl1baV0udl0gPSB0cnVlOwogICAgICAgIHEucHVzaChlZGdlc1t2XVtpXS52KTsKICAgICAgICBwW2VkZ2VzW3ZdW2ldLnZdID0gc3RkOjptYWtlX3BhaXIodiwgaSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIDA7Cn0KCmludCBtYWluKCkgewogIGludCBuLCBtLCBhLCBiLCBjLCBzLCB0OwogIHNjYW5mKCIlZCAlZCIsICZuLCAmbSk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgIHNjYW5mKCIlZCAlZCAlZCIsICZhLCAmYiwgJmMpOwogICAgLS1hLCAtLWI7CiAgICBlZGdlc1thXS5wdXNoX2JhY2soZWRnZShiLCBjLCBlZGdlc1tiXS5zaXplKCkpKTsKICAgIGVkZ2VzW2JdLnB1c2hfYmFjayhlZGdlKGEsIDAsIGVkZ2VzW2FdLnNpemUoKSAtIDEpKTsKICB9CiAgc2NhbmYoIiVkICVkIiwgJnMsICZ0KTsKICAtLXMsIC0tdDsKICBpbnQgdG1wLCByZXMgPSAwOwogIHdoaWxlICh0bXAgPSBiZnMocywgdCwgbikpIHsKICAgIHJlcyArPSB0bXA7CiAgfQogIHByaW50ZigiJWRcbiIsIHJlcyk7CiAgcmV0dXJuIDA7Cn0K