#include using namespace std; struct Bipartite { Bipartite(int n) : n(n), adj(n), mate(n, -1), delL(n), delR(n) {} void AddEdge(int u, int v) { adj[u].push_back(v); } void DeleteLVertex(int u) { delL[u] = true; } void DeleteRVertex(int u) { delR[u] = true; } pair, vector> Cover() { for(int v=0; v inv_mate(n, -1); for(int v=0;v= 0) inv_mate[mate[v]] = v; used.assign(n, false); usedR.assign(n, false); for (int v=0;v L(n), R(n); for(int l=0;l> adj; vector used, usedR; vector mate; vector delL, delR; }; int main() { int n, m; cin >> n >> m; string orig, now; cin >> orig >> now; vector> edges(m); for(auto& [u, v] : edges) cin >> u >> v; Bipartite G(n); for (int i=0;i