#include using namespace std; int t,n,m,p[5005],x,sub[5005]; vector > g[10005]; vector tree[5005]; int p2[10005]; bool vis[10005]; void rset() { for(int i=0;i<10005;i++) { p2[i] = -1; vis[i] = 0; g[i].clear(); if(i<5005) { p[i] = 0; tree[i].clear(); sub[i] = 0; } } } bool dfs(int i) { if(i == n+m+1) return 1; vis[i] = 1; for(int k=0;k 0) if(dfs(g[i][k].first)) { p2[g[i][k].first] = i; return 1; } return 0; } void flow() { int minf = 0,tflow = 0,i,k; while(dfs(0)) { minf = INT_MAX; i = m+n+1; while(i != 0) { k = p2[i]; for(int c=0;c>t; while(t--) { rset(); scanf("%i%i",&n,&m); for(int i=2;i