#include <bits/stdc++.h>
using namespace std;
void dfs(int n, int e, vector<vector<bool> > &g, vector<bool> &used,
         set<int> &cur) {
  for (int prev : cur) {
    if (!g[e][prev]) return;
  }
  cur.insert(e);
  used[e] = true;
  for (int i = 0; i < n; ++i) {
    if (g[e][i] and !used[i]) {
      dfs(n, i, g, used, cur);
    }
  }
}
int main() {
  int n;
  cin >> n;
  vector<vector<bool> > g(n, vector<bool>(n));
  int m;
  cin >> m;
  while (m--) {
    int x, y;
    cin >> x >> y;
    g[x - 1][y - 1] = g[y - 1][x - 1] = true;
  }
  vector<set<int> > d(3);
  string ans(n, 'x');
  set<int> a, b, c;
  set<int> fa, fc;
  for (int i = 0; i < n; ++i) {
    set<int> cur;
    for (int j = 0; j < n; ++j) {
      if (i == j) continue;
      if (!g[i][j]) cur.insert(j);
    }
    if (cur.empty()) {
      b.insert(i);
    } else if (fa.empty()) {
      fa = cur;
      a.insert(i);
    } else if (fa.size() == cur.size() and
               equal(fa.begin(), fa.end(), cur.begin()))
      a.insert(i);
    else if (fc.empty()) {
      fc = cur;
      c.insert(i);
    } else if (fc.size() == cur.size() and
               equal(fc.begin(), fc.end(), cur.begin()))
      c.insert(i);
    else {
      cout << "No" << endl;
      return 0;
    }
  }
  if (a.size() + b.size() + c.size() == n) {
    cout << "Yes" << endl;
    for (int i : a) ans[i] = 'a';
    for (int i : b) ans[i] = 'b';
    for (int i : c) ans[i] = 'c';
    cout << ans << endl;
  } else {
    cout << "No" << endl;
  }
}
