#include using namespace std; template struct MaxFlowGraph{ struct edge{ int from, to; Cap cap, flow; }; MaxFlowGraph(int n): G(n), _n(n), cap_max(0){} int add_edge(int a, int b, Cap c){ assert(0<=a && a<_n); assert(0<=b && b<_n); assert(0<=c); G[a].push_back({b, G[b].size(), edg.size(), c}); G[b].push_back({a, G[a].size()-1, ~(int)edg.size(), 0}); edg.push_back({a, b, c, 0}); if(cap_max < c) cap_max = c; return edg.size()-1; } Cap flow(int s, int t){ Cap res = 0; while(true){ used.assign(_n, false); Cap fw = dfs(s, t, cap_max); if(fw==0)break; res += fw; } return res; } std::vector edges(){return edg;} edge get_edge(int k){return edg[k];} private: struct edge_{ int to, rev, id; Cap cap; }; int _n; Cap cap_max; std::vector> G; std::vector edg; std::vector used; Cap dfs(int v, int t, Cap f){ if(v==t) return f; used[v] = true; for(edge_ &e:G[v]){ if(used[e.to] || e.cap==0) continue; Cap fw = dfs(e.to, t, std::min(f, e.cap)); if(fw==0) continue; e.cap -= fw; G[e.to][e.rev].cap += fw; if(e.id<0) edg[~e.id].flow -= fw; else edg[e.id].flow += fw; return fw; } return 0; } }; constexpr int INF=1e9; int main(){ int N; cin>>N; int s=2*N,t=s+1; MaxFlowGraph G(2*N+2); int sum=0; for(int i=0;i>B>>C; sum+=B+C; G.add_edge(s,i,B); G.add_edge(N+i,t,C); } for(int i=0;i>M; for(int i=0;i>a>>b; G.add_edge(a,N+b,INF); } cout<