#include <bits/stdc++.h>
using namespace std;
bool vis[502];
vector<int> G[502];
int n, val[502], f, b = 0, a = 0, c = 0;
void dfs(int u, int d) {
  vis[u] = true;
  val[u] = d;
  int i;
  for (i = 0; i < G[u].size(); i++) {
    int v = G[u][i];
    if (vis[v] == false) {
      dfs(v, d);
    }
  }
}
void DFS() {
  f = 1;
  for (int i = 1, cnt = 0; i <= n; i++) {
    if (vis[i] == false) {
      cnt++;
      if (cnt == 3) {
        f = 0;
        break;
      }
      dfs(i, cnt);
    }
  }
}
int main() {
  int e, u, v, i;
  cin >> n >> e;
  while (e--) {
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (i = 1; i <= n; i++) {
    if (G[i].size() == n - 1) {
      b++;
      vis[i] = true;
    }
  }
  for (u = 1; u <= n; u++) {
    if (vis[u] == false) {
      a++;
      val[u] = 1;
      vis[u] = true;
      for (i = 0; i < G[u].size(); i++) {
        int v = G[u][i];
        if (vis[v] == false) {
          a++;
          val[v] = 1;
          vis[v] = true;
        }
      }
      break;
    }
  }
  for (i = 1; i <= n; i++) {
    if (vis[i] == false) {
      c++;
      vis[i] = true;
      val[i] = 2;
    }
  }
  for (i = 1, f = 1; i <= n; i++) {
    if ((val[i] == 1 && G[i].size() != a + b - 1) ||
        (val[i] == 2 && G[i].size() != c + b - 1)) {
      f = 0;
      break;
    }
  }
  if (!f) {
    cout << "No\n";
  } else {
    cout << "Yes\n";
    for (i = 1; i <= n; i++) {
      if (!val[i])
        cout << "b";
      else if (val[i] == 1)
        cout << "a";
      else
        cout << "c";
    }
    cout << "\n";
  }
  return 0;
}
