#include <bits/stdc++.h>   using namespace std;   int n, m;   vector<int> adjs[510];   char type[510];   bool visited[510];   int dfs(int v, int adj, char c) {     visited[v] = true;     type[v] = c;     int totV = 1;     for (int i = 0; i < (adj); i++) {       int adjV = adjs[v][i];       if (!visited[adjV] && adjs[adjV].size() == adj) totV += dfs(adjV, adj, c);     }     return totV;   }   int main(int argc, char **argv) {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n >> m;     for (int var = 0; var < (n); var++) type[var] = ( x );     for (int var = 0; var < (n); var++) visited[var] = (false);     for (int i = 0; i < (m); i++) {       int u, v;       cin >> u >> v;       u--;       v--;       adjs[u].push_back(v);       adjs[v].push_back(u);     }     int adja = -1, adjb = n - 1, adjc = -1;     int na = 0, nb = 0, nc = 0;     bool pos = true;     for (int i = 0; i < (n); i++) {       int k = adjs[i].size();       if (k == adjb) {         nb++;         type[i] =  b ;         visited[i] = true;       } else if (!visited[i]) {         if (na == 0) {           adja = adjs[i].size();           na = dfs(i, adja,  a );         } else if (nc == 0) {           adjc = adjs[i].size();           nc = dfs(i, adjc,  c );         } else           pos = false;       }     }     type[n] =   0 ;     if (pos && na + nb + nc == n && (adja == -1 || adja == na + nb - 1) &&         (adjc == -1 || adjc == nb + nc - 1)) {       cout << ( Yes ) <<   n ;       cout << (type) <<   n ;     } else {       cout << ( No ) <<   n ;     }     return 0;   }   