func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int con = 0;   vector<pair<long long int, long long int> > v;   long long int t[5000][5001];   vector<vector<pair<long long int, long long int> > > ans(5001);   bool istrue[5001];   vector<long long int> a[5001];   long long int dis[5001];   int n;   int ppp = 0;   queue<int> q;   void bfs(int src) {     q.push(src);     istrue[src] = true;     dis[src] = 0;     while (!q.empty()) {       int p = q.front();       q.pop();       ans[con].push_back({(dis[p] + 1) % 2, p});       for (auto u : a[p]) {         if (!istrue[u]) {           dis[u] = dis[p] + 1;           if (dis[u] % 2)             v[con].second++;           else             v[con].first++;           istrue[u] = true;           q.push(u);         } else {           if (dis[u] % 2 == dis[p] % 2) {             cout <<  NO                   <<   n ;             ppp = 1;             return;           }         }       }     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int tt = 1;     while (tt--) {       long long int m;       cin >> n >> m;       long long int n1, n2, n3;       cin >> n1 >> n2 >> n3;       for (int i = 0; i < m; i++) {         int x, y;         cin >> x >> y;         a[x].push_back(y);         a[y].push_back(x);       }       for (int i = 1; i <= n; i++) {         if (!istrue[i]) {           v.push_back({1, 0});           bfs(i);           con++;         }         if (ppp == 1) return 0;       }       memset(t, -1, sizeof(t));       if (v[0].first <= n2) t[0][v[0].first] = 0;       if (v[0].second <= n2) t[0][v[0].second] = 0;       for (int i = 1; i <= (long long int)v.size() - 1; i++) {         for (int j = 0; j < n2 + 1; j++) {           long long int vv = j - v[i].first;           if (vv >= 0 && t[i - 1][vv] != -1) t[i][j] = vv;           vv = j - v[i].second;           if (vv >= 0 && t[i - 1][vv] != -1) t[i][j] = vv;         }       }       char ss[n + 1];       if (t[(long long int)v.size() - 1][n2] == -1)         cout <<  NO               <<   n ;       else {         cout <<  YES               <<   n ;         long long int i = (long long int)v.size() - 1, ind = n2;         while (i != -1) {           long long int pp = ind - t[i][ind], kk = 0;           if (v[i].first == pp) kk = 1;           for (auto u : ans[i]) {             if (u.first == kk)               ss[u.second] =  2 ;             else               ss[u.second] =  1 ;           }           ind = t[i][ind];           i--;         }         for (int j = 1; j <= n; j++) {           if (ss[j] ==  1 ) {             if (n1 == 0)               ss[j] =  3 ;             else               n1--;           }           cout << ss[j];         }         cout <<   n ;       }     }     return 0;   }   