#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
int n,m,res,s,t;
struct data
{
int v,f,c;
};
vector <data> e;
vector<int>g[maxn];
int dd[maxn],cnt,d[maxn],pos[maxn];
bool bfs()
{
queue<int> q;
dd[s]=++cnt;
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty())
{
int u=q.front();
pos[u]=0;
q.pop();
for (int i=0; i<(int)g[u].size(); ++i)
{
int id=g[u][i];
int v=e[id].v;
if (e[id].f==e[id].c||dd[v]==cnt) continue;
dd[v]=cnt;
d[v]=d[u]+1;
q.push(v);
}
}
return dd[t]==cnt;
}
int dfs(int u,int low)
{
if (u==t||low==0) return low;
for (; pos[u]<g[u].size(); ++pos[u])
{
int id=g[u][pos[u]];
int v=e[id].v;
if (d[v]!=d[u]+1||e[id].f==e[id].c) continue;
int get=dfs(v,min(low,e[id].c-e[id].f));
if (get)
{
e[id].f+=get;
e[id^1].f-=get;
return get;
}
}
return 0;
}
int main()
{
//freopen("NKFLOW.inp","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s>>t;
for (int i=1; i<=m; ++i)
{
int u,v,w;
cin>>u>>v>>w;
g[u].push_back(e.size());
data x;
x.v=v;
x.c=w;
x.f=0;
e.push_back(x);
g[v].push_back(e.size());
x.v=u;
x.c=0;
x.f=0;
e.push_back(x);
}
while(bfs())
{
while(int x=dfs(s,10000000))
{
res+=x;
}
}
cout<<res;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBtYXhuIDEwMDUKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG4sbSxyZXMscyx0OwpzdHJ1Y3QgZGF0YQp7CiAgICAgICAgICAgIGludCB2LGYsYzsKfTsKdmVjdG9yIDxkYXRhPiBlOwp2ZWN0b3I8aW50PmdbbWF4bl07CmludCBkZFttYXhuXSxjbnQsZFttYXhuXSxwb3NbbWF4bl07CmJvb2wgYmZzKCkKewogICAgICAgICAgICBxdWV1ZTxpbnQ+IHE7CiAgICAgICAgICAgIGRkW3NdPSsrY250OwogICAgICAgICAgICB3aGlsZSghcS5lbXB0eSgpKSBxLnBvcCgpOwogICAgICAgICAgICBxLnB1c2gocyk7CiAgICAgICAgICAgIHdoaWxlKCFxLmVtcHR5KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHU9cS5mcm9udCgpOwogICAgICAgICAgICAgICAgICAgICAgICBwb3NbdV09MDsKICAgICAgICAgICAgICAgICAgICAgICAgcS5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPChpbnQpZ1t1XS5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9Z1t1XVtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHY9ZVtpZF0udjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaWRdLmY9PWVbaWRdLmN8fGRkW3ZdPT1jbnQpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFt2XT1jbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbdl09ZFt1XSsxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZGRbdF09PWNudDsKfQppbnQgZGZzKGludCB1LGludCBsb3cpCnsKICAgICAgICAgICAgaWYgKHU9PXR8fGxvdz09MCkgcmV0dXJuIGxvdzsKICAgICAgICAgICAgZm9yICg7IHBvc1t1XTxnW3VdLnNpemUoKTsgKytwb3NbdV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkPWdbdV1bcG9zW3VdXTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHY9ZVtpZF0udjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRbdl0hPWRbdV0rMXx8ZVtpZF0uZj09ZVtpZF0uYykgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBnZXQ9ZGZzKHYsbWluKGxvdyxlW2lkXS5jLWVbaWRdLmYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2lkXS5mKz1nZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVbaWReMV0uZi09Z2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIDA7Cn0KaW50IG1haW4oKQp7CiAgICAgICAgICAgIC8vZnJlb3BlbigiTktGTE9XLmlucCIsInIiLHN0ZGluKTsKICAgICAgICAgICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICAgICAgICAgIGNpbi50aWUoMCk7CiAgICAgICAgICAgIGNvdXQudGllKDApOwogICAgICAgICAgICBjaW4+Pm4+Pm0+PnM+PnQ7CiAgICAgICAgICAgIGZvciAoaW50IGk9MTsgaTw9bTsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCB1LHYsdzsKICAgICAgICAgICAgICAgICAgICAgICAgY2luPj51Pj52Pj53OwogICAgICAgICAgICAgICAgICAgICAgICBnW3VdLnB1c2hfYmFjayhlLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgeDsKICAgICAgICAgICAgICAgICAgICAgICAgeC52PXY7CiAgICAgICAgICAgICAgICAgICAgICAgIHguYz13OwogICAgICAgICAgICAgICAgICAgICAgICB4LmY9MDsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wdXNoX2JhY2soeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGdbdl0ucHVzaF9iYWNrKGUuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgeC52PXU7CiAgICAgICAgICAgICAgICAgICAgICAgIHguYz0wOwogICAgICAgICAgICAgICAgICAgICAgICB4LmY9MDsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wdXNoX2JhY2soeCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUoYmZzKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoaW50IHg9ZGZzKHMsMTAwMDAwMDApKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcys9eDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PHJlczsKICAgICAgICAgICAgcmV0dXJuIDA7Cn0K