#include <bits/stdc++.h>
#define nmx 1005
#define inf 1000000000
using namespace std;
int n,m,a,b,c,cant[nmx][nmx],F[nmx][nmx],rsp,bck[nmx];
bool vf[nmx];
vector <int> v[nmx];
bool bfs()
{
deque <int> dq;
dq.push_back(1);
for (int i=1; i<=n; i++)
vf[i]=0;
while (!dq.empty())
{
auto u=dq.front();
dq.pop_front();
for (auto it : v[u])
{
if (vf[it] || cant[u][it]==F[u][it])
continue;
bck[it]=u;
vf[it]=1;
if (it==n)
return 1;
dq.push_back(it);
}
}
return 0;
}
int main()
{
ifstream f ("maxflow.in");
ofstream g ("maxflow.out");
f>>n>>m;
for (int i=1; i<=m; i++)
{
f>>a>>b>>c;
cant[a][b]+=c;
v[a].push_back(b);
v[b].push_back(a);
}
while (1)
{
int ok=bfs();
if (!ok) break;
int now=n;
int ct=inf;
while (now!=1)
{
ct=min(ct,cant[bck[now]][now]-F[bck[now]][now]);
now=bck[now];
}
now=n;
while (now!=1)
{
F[bck[now]][now]+=ct;
F[now][bck[now]]-=ct;
now=bck[now];
}
rsp+=ct;
}
g<<rsp;
}