func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     int n, m;     cin >> n >> m;     int n1, n2, n3;     cin >> n1 >> n2 >> n3;     vector<int> v[n + 1];     for (int i = 0; i < m; i++) {       int a, b;       cin >> a >> b;       v[a].push_back(b);       v[b].push_back(a);     }     auto out = []() {       cout <<  NO n ;       exit(0);     };     if (n2 == 0) {       if (m == 0) {         cout <<  YES n ;         cout << string(n1,  1 ) + string(n3,  3 ) <<   n ;         exit(0);       } else         out();     }     vector<int> vis(n + 1, 0);     vector<vector<int>> one;     vector<vector<int>> two;     vector<vector<array<int, 2>>> dp(n + 1, vector<array<int, 2>>(n + 1, {0, 0}));     dp[0][0] = {-1, 1};     int comp = 0;     for (int i = 1; i <= n; i++) {       if (vis[i] != 0) continue;       comp++;       queue<int> q;       q.push(i);       vis[i] = 1;       vector<int> d[3];       vector<int> cnt(3, 0);       d[1].push_back(i);       cnt[1] = 1;       while (!q.empty()) {         int x = q.front();         q.pop();         for (int to : v[x]) {           if (vis[to] == 0) {             q.push(to);             vis[to] = 3 - vis[x];             d[vis[to]].push_back(to);             cnt[vis[to]]++;           } else if (vis[to] == vis[x])             out();         }       }       one.push_back(d[1]);       two.push_back(d[2]);       for (int j = 0; j <= n; j++) {         if (dp[comp - 1][j][1] == 0) continue;         for (int k = 1; k <= 2; k++)           if (dp[comp][j + cnt[k]][1] == 0)             dp[comp][j + cnt[k]] = {(int)one.size() - 1, k};       }     }     if (dp[comp][n2][1] == 0) out();     string res(n + 1,  0 );     int c = comp;     int now = n2;     while (now > 0) {       if (dp[c][now][1] == 1) {         for (int x : one[dp[c][now][0]]) res[x] =  2 ;         now -= one[dp[c][now][0]].size();       } else {         for (int x : two[dp[c][now][0]]) res[x] =  2 ;         now -= two[dp[c][now][0]].size();       }       c--;     }     for (int i = 1; i <= n; i++) {       if (res[i] ==  2 ) continue;       if (n1 > 0) {         res[i] =  1 ;         n1--;       } else         res[i] =  3 ;     }     cout <<  YES n ;     cout << res.substr(1, n) <<   n ;     return 0;   }   