func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100010;   int n, m, h, t, maxv;   int e[maxn][2];   set<int> mp[maxn];   vector<int> g[maxn];   vector<int> xv, yv;   set<int> comm;   bool check(int x, int y, vector<int> &xv, vector<int> &yv, set<int> &comm) {     int lx = max(0, (int)(h - xv.size()));     int ly = max(0, (int)(t - yv.size()));     if (comm.size() >= lx + ly) {       printf( YES n );       printf( %d %d n , x, y);       set<int>::iterator it = comm.begin();       int mx = min((int)xv.size(), h);       for (int i = 0; i < mx; i++) printf( %d  , xv[i]);       for (int i = 0; i < lx; i++) {         printf( %d  , *it);         it++;       }       printf(  n );       int my = min((int)yv.size(), t);       for (int i = 0; i < my; i++) printf( %d  , yv[i]);       for (int i = 0; i < ly; i++) {         printf( %d  , *it);         it++;       }       printf(  n );       return true;     }     return false;   }   bool solve(int x, int y) {     if (mp[x].size() <= h || mp[y].size() <= t) return false;     int cnt = mp[x].size() - 1;     for (int i = 0; i < g[y].size() && cnt < h + t; i++) {       int tx = g[y][i];       if (tx == x) continue;       if (mp[x].count(tx) == 0) cnt++;     }     if (cnt < h + t) return false;     xv.clear();     yv.clear();     comm.clear();     for (set<int>::iterator it = mp[x].begin();          it != mp[x].end() && xv.size() <= h && comm.size() <= maxv; it++) {       int ty = *it;       if (ty == y) continue;       if (mp[y].find(ty) != mp[y].end())         comm.insert(ty);       else         xv.push_back(ty);     }     for (set<int>::iterator it = mp[y].begin();          it != mp[y].end() && yv.size() <= t && comm.size() <= maxv; it++) {       int tx = *it;       if (tx == x) continue;       if (mp[x].find(tx) != mp[x].end())         comm.insert(tx);       else         yv.push_back(tx);     }     if (check(x, y, xv, yv, comm)) return true;     return false;   }   int main() {     scanf( %d%d%d%d , &n, &m, &h, &t);     maxv = h + t;     for (int i = 1; i <= n; i++) mp[i].clear();     for (int i = 0; i < m; i++) {       int tx, ty;       scanf( %d%d , &tx, &ty);       mp[tx].insert(ty);       mp[ty].insert(tx);       g[tx].push_back(ty);       g[ty].push_back(tx);     }     int flags = false;     for (int i = 1; i <= n; i++)       if (flags == false)         for (int j = 0; j < g[i].size(); j++) {           if (solve(i, g[i][j])) {             flags = true;             break;           }         }     if (!flags) printf( NO n );     return 0;   }   