func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   char an[505];   vector<int> b, other[5];   int A[505][505], visited[505], ans[5];   int dfs(int node, int flag) {     int sz = 1;     visited[node] = flag;     other[flag].push_back(node);     for (int i = 0; i < n; ++i)       if (!visited[i] and A[node][i]) sz += dfs(i, flag);     return sz;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 0; i < m; ++i) {       int a, b;       scanf( %d%d , &a, &b);       --a;       --b;       A[a][b] = A[b][a] = 1;     }     for (int i = 0; i < n; ++i) {       an[i] =  b ;       bool connected = true;       for (int j = 0; j < n and connected; ++j)         if (i != j and !A[i][j]) connected = false;       if (connected) {         visited[i] = 5;         b.push_back(i);       }     }     for (int i = 0; i < (int)b.size(); ++i)       for (int j = 0; j < n; ++j) A[j][b[i]] = A[b[i]][j] = 0;     int cnt = 0;     for (int i = 0; i < n; ++i) {       if (!visited[i]) {         if (cnt == 2) {           printf( No n );           return 0;         }         ans[cnt] = dfs(i, cnt + 1);         ++cnt;       }     }     for (int i = 1; i < 3; ++i)       for (int j = 0; j < (int)other[i].size(); ++j)         for (int k = j + 1; k < (int)other[i].size(); ++k) {           assert(A[other[i][j]][other[i][k]] == A[other[i][k]][other[i][j]]);           if (!A[other[i][j]][other[i][k]]) {             printf( No n );             return 0;           }         }     printf( Yes n );     for (int i = 0; i < ans[0]; ++i) an[other[1][i]] =  a ;     for (int i = 0; i < ans[1]; ++i) an[other[2][i]] =  c ;     an[n] =   0 ;     printf( %s n , an);     return 0;   }   