func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Edge {     int u, v;   };   const int MAXN = 2e5 + 5;   int p[MAXN];   vector<Edge> edges;   vector<int> G[MAXN];   bool va[MAXN], vb[MAXN];   int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }   int main() {     memset(va, 0, sizeof(va));     memset(vb, 0, sizeof(vb));     int n, m;     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; i++) p[i] = i;     while (m--) {       int u, v;       scanf( %d%d , &u, &v);       edges.push_back((Edge){u, v});     }     int s, t, ds, dt;     scanf( %d%d%d%d , &s, &t, &ds, &dt);     vector<Edge> g;     bool ok = 0;     for (int i = 0; i < edges.size(); i++) {       int u = edges[i].u, v = edges[i].v;       bool flag = 0;       if (u == s || u == t) G[u].push_back(v), flag = 1;       if (v == s || v == t) G[v].push_back(u), flag = 1;       if (flag) continue;       u = find(u), v = find(v);       if (u != v) {         p[v] = u;         g.push_back((Edge){edges[i].u, edges[i].v});       }     }     for (int i = 0; i < G[s].size(); i++) va[G[s][i]] = 1;     for (int i = 0; i < G[t].size(); i++) vb[G[t][i]] = 1;     int as = 0, at = 0;     for (int i = 0; i < G[s].size(); i++) {       if (as > ds) break;       if (G[s][i] == t) {         ok = 1;         continue;       }       if (vb[G[s][i]]) continue;       int u = find(s), v = find(G[s][i]);       if (u != v) {         as++;         p[u] = v;         g.push_back((Edge){s, G[s][i]});       }     }     for (int i = 0; i < G[s].size(); i++) {       if (as >= ds) break;       if (G[s][i] == t) {         ok = 1;         continue;       }       int u = find(s), v = find(G[s][i]);       if (u != v) {         as++;         p[u] = v;         g.push_back((Edge){s, G[s][i]});       }     }     for (int i = 0; i < G[t].size(); i++) {       if (at > dt) break;       if (G[t][i] == s) {         ok = 1;         continue;       }       int u = find(t), v = find(G[t][i]);       if (u != v) {         at++;         p[u] = v;         g.push_back((Edge){t, G[t][i]});       }     }     int u = find(s), v = find(t);     if (u != v) {       if (ok) {         g.push_back((Edge){s, t});         as++;         at++;       } else {         puts( No );         return 0;       }     }     if (as > ds || at > dt)       puts( No );     else {       puts( Yes );       for (int i = 0; i < g.size(); i++) {         printf( %d %d n , g[i].u, g[i].v);       }     }     return 0;   }   