#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5 + 15;
int n;
char ans[505], col = 'a';
int in[505], vis[505], G[505][505];
int main() {
  int m;
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    in[u]++, in[v]++;
    G[u][v] = G[v][u] = 1;
  }
  for (int i = 1; i <= n; i++)
    if (in[i] == n - 1) ans[i - 1] = 'b', vis[i] = 2;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      ans[i - 1] = 'a';
      vis[i] = 1;
      for (int j = 1; j <= n; j++)
        if (G[i][j] && !vis[j]) ans[j - 1] = 'a', vis[j] = 1;
      break;
    }
  bool fg = true;
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      for (int j = 1; j <= n; j++)
        if (i == j)
          continue;
        else if (G[i][j] && vis[j] == 1)
          fg = false;
    } else if (vis[i] == 1) {
      for (int j = 1; j <= n; j++)
        if (i == j)
          continue;
        else if (G[i][j] && !vis[j])
          fg = false;
        else if (!G[i][j] && vis[j] == 1)
          fg = false;
    }
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      ans[i - 1] = 'c';
      vis[i] = 3;
      for (int j = 1; j <= n; j++)
        if (G[i][j] && !vis[j]) ans[j - 1] = 'c', vis[j] = 3;
      break;
    }
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      for (int j = 1; j <= n; j++)
        if (i == j)
          continue;
        else if (G[i][j] && vis[j] == 3)
          fg = false;
    } else if (vis[i] == 3) {
      for (int j = 1; j <= n; j++)
        if (i == j)
          continue;
        else if (G[i][j] && !vis[j])
          fg = false;
        else if (!G[i][j] && vis[j] == 3)
          fg = false;
    }
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      fg = false;
      break;
    }
  if (!fg)
    puts("No");
  else {
    ans[n] = '\0';
    puts("Yes");
    printf("%s\n", ans);
  }
  return 0;
}
