func_code_string: #include <bits/stdc++.h>   using namespace std;   int vis[100005], tick = 0;   vector<int> G[100005];   int a[200001], b[200005];   int main() {     int n, m, h, t;     scanf( %d%d%d%d , &n, &m, &h, &t);     for (int i = 1; i <= m; ++i) {       int u, v;       scanf( %d%d , &u, &v);       G[u].push_back(v);       G[v].push_back(u);       a[i * 2 - 1] = u;       b[i * 2 - 1] = v;       a[i * 2] = v;       b[i * 2] = u;     }     for (int i = 1; i <= n; ++i) sort(G[i].begin(), G[i].end());     bool flag = 0;     for (int i = 1; i <= 2 * m; ++i) {       int u = a[i], v = b[i];       if (G[u].size() - 1 < h || G[v].size() - 1 < t) continue;       bool done = 0;       if (G[u].size() > G[v].size()) {         swap(u, v);         done = 1;       }       int acnt = 0, bcnt = 0, bothcnt = 0;       for (int j = 0; j < G[u].size(); ++j) {         if (G[u][j] == v) continue;         if (binary_search(G[v].begin(), G[v].end(), G[u][j])) {           bothcnt++;         } else {           acnt++;         }       }       bcnt = G[v].size() - 1 - bothcnt;       if (done) {         swap(acnt, bcnt);         swap(u, v);       }       if (max(0, h - acnt) + max(0, t - bcnt) > bothcnt) continue;       tick++;       for (int j = 0; j < G[u].size(); ++j)         if (G[u][j] != v) {           vis[G[u][j]] = tick;         }       vector<int> A, B, BOTH;       tick++;       for (int j = 0; j < G[v].size(); ++j)         if (G[v][j] != u) {           if (vis[G[v][j]] == tick - 1) {             BOTH.push_back(G[v][j]);           } else {             B.push_back(G[v][j]);           }           vis[G[v][j]] = tick;         }       for (int j = 0; j < G[u].size(); ++j)         if (G[u][j] != v) {           if (vis[G[u][j]] != tick) {             A.push_back(G[u][j]);           }         }       if (max(0, h - (int)A.size()) + max(0, t - (int)B.size()) <=           (int)BOTH.size()) {         flag = 1;         puts( YES );         printf( %d %d n , u, v);         int k = 0;         while (A.size() < h) A.push_back(BOTH[k++]);         while (B.size() < t) B.push_back(BOTH[k++]);         for (int i = 0; i < h; ++i) printf( %d%c , A[i],    n [i == h - 1]);         for (int i = 0; i < t; ++i) printf( %d%c , B[i],    n [i == t - 1]);         break;       }     }     if (!flag) puts( NO );   }   