#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vl = vector<ll>;
using vvl = vector<vl>;
using pll = pair<ll, ll>;
using vb = vector<bool>;
const ll oo = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-9;
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  bool adj[500][500];
  for (int i = (0); i < (500); i++)
    for (int j = (0); j < (500); j++) adj[i][j] = false;
  for (int i = (0); i < (500); i++) adj[i][i] = true;
  for (int i = (0); i < (m); i++) {
    ll u, v;
    cin >> u >> v;
    adj[u - 1][v - 1] = true;
    adj[v - 1][u - 1] = true;
  }
  vector<char> s(n, '.');
  for (int i = (0); i < (n); i++) {
    bool isB = true;
    for (int j = (0); j < (n); j++) {
      if (!adj[i][j]) isB = false;
    }
    if (isB) {
      s[i] = 'b';
    }
  }
  for (int i = (0); i < (n); i++) {
    if (s[i] == 'b') continue;
    for (int j = (0); j < (n); j++) {
      if (adj[i][j] && s[j] != 'b') {
        s[j] = 'a';
      }
    }
    break;
  }
  bool poss = true;
  for (int i = (0); i < (n); i++) {
    if (s[i] == 'a') {
      for (int j = (0); j < (n); j++) {
        if ((adj[i][j] && s[j] == '.') || (!adj[i][j] && s[j] != '.')) {
          poss = false;
        }
      }
    } else if (s[i] == '.') {
      for (int j = (0); j < (n); j++) {
        if ((adj[i][j] && s[j] == 'a') || (!adj[i][j] && s[j] != 'a')) {
          poss = false;
        }
      }
    }
  }
  if (!poss) {
    cout << "No" << endl;
  } else {
    cout << "Yes" << endl;
    for (int i = (0); i < (n); i++) {
      if (s[i] == '.')
        cout << 'c';
      else
        cout << s[i];
    }
    cout << endl;
  }
}
