#include using namespace std; struct Matching { int m, n; vector l, r; vector vis, ok; vector> adj; Matching(int m, int n) : m(m), n(n), l(n), r(m), vis(m), ok(m), adj(m) {} void clear() { for(int i=0; i<=n; i++) adj[i].clear(); } void addEdge(int x, int y) { adj[x].push_back(y); } bool pairUp(int v) { if(vis[v]) return false; vis[v] = true; for(auto u : adj[v]) if(l[u] == -1) return l[u] = v, r[v] = u, true; for(auto u : adj[v]) if(pairUp(l[u])) return l[u] = v, r[v] = u, true; return false; } int matching() { int sz; bool changed; l.assign(n, -1); r.assign(m, -1); for(sz=0, changed=true; changed; ) { vis.assign(m, false); changed = false; for(int i=0; i= minDif) { //cout<<"m add "<>t; while(t) { t--; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; g = Matching(n+1, n+1); //cout<