#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
bool pos[maxn][maxn];
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    --u;
    --v;
    pos[u][v] = true;
    pos[v][u] = true;
  }
  set<int> a, b, c;
  for (int i = 0; i < n; i++) {
    bool flag = true;
    for (int j = 0; j < n; j++) {
      if (i != j && !pos[i][j]) {
        flag = false;
        break;
      }
    }
    if (flag) b.insert(i);
  }
  for (int i = 0; i < n; i++) {
    if (b.find(i) == b.end()) {
      a.insert(i);
      for (int j = 0; j < n; j++) {
        if (i != j && pos[i][j] && b.find(j) == b.end()) a.insert(j);
      }
      break;
    }
  }
  for (int i = 0; i < n; i++) {
    if (a.find(i) == a.end() && b.find(i) == b.end()) c.insert(i);
  }
  bool ok = true;
  for (set<int>::iterator it = a.begin(); it != a.end(); it++) {
    for (set<int>::iterator jt = a.begin(); jt != a.end(); jt++) {
      int u = *it, v = *jt;
      if (u == v) continue;
      if (!pos[u][v]) {
        ok = false;
        break;
      }
    }
    if (!ok) break;
  }
  for (set<int>::iterator it = c.begin(); it != c.end(); it++) {
    if (!ok) break;
    for (set<int>::iterator jt = c.begin(); jt != c.end(); jt++) {
      int u = *it, v = *jt;
      if (u == v) continue;
      if (!pos[u][v]) {
        ok = false;
        break;
      }
    }
  }
  for (set<int>::iterator it = a.begin(); it != a.end(); it++) {
    for (set<int>::iterator jt = c.begin(); jt != c.end(); jt++) {
      int u = *it, v = *jt;
      if (pos[u][v]) {
        ok = false;
        break;
      }
    }
    if (!ok) break;
  }
  if (ok) {
    cout << "Yes" << endl;
    for (int i = 0; i < n; i++) {
      if (a.find(i) != a.end())
        cout << 'a';
      else if (b.find(i) != b.end())
        cout << 'b';
      else
        cout << 'c';
    }
  } else {
    cout << "No" << endl;
  }
  return 0;
}
