#include <bits/stdc++.h>   using namespace std;   int cnt = 0;   vector<int> ans;   vector<vector<int> > adj;   void dfs(int u, int col) {     if (ans[u] != -1) return;     ans[u] = col;     for (int i = 0; i < adj[u].size(); ++i) dfs(adj[u][i], col);   }   char conv(int first) {     if (first == 0) return  b ;     if (first == 1) return  a ;     if (first == 2) return  c ;   }   int main() {     cout.setf(ios::fixed);     cout.precision(7);     ios_base::sync_with_stdio(false);     cin.tie(0);     int n, m;     cin >> n >> m;     adj = vector<vector<int> >(n);     vector<int> deg(n, 0);     for (int asdf = 0; asdf < m; ++asdf) {       int first, second;       cin >> first >> second;       --first;       --second;       adj[first].push_back(second);       adj[second].push_back(first);       ++deg[first];       ++deg[second];     }     ans = vector<int>(n, -1);     int qt = 0;     for (int i = 0; i < n; ++i)       if (deg[i] == n - 1) {         ans[i] = 0;         ++qt;       }     for (int i = 0; i < n; ++i)       if (ans[i] == -1) {         ++cnt;         dfs(i, cnt);       }     bool ok = true;     if (cnt >= 3) ok = false;     int n1 = 0, m1 = 0, n2 = 0, m2 = 0;     for (int i = 0; i < n; ++i) {       if (ans[i] == 1) {         ++n1;         m1 += deg[i] - qt;       } else if (ans[i] == 2) {         ++n2;         m2 += deg[i] - qt;       }     }     if (n1 * (n1 - 1) != m1) ok = false;     if (n2 * (n2 - 1) != m2) ok = false;     if (not ok)       cout <<  No n ;     else {       cout <<  Yes n ;       for (int i = 0; i < n; ++i) cout << conv(ans[i]);       cout <<   n ;     }   }   