#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
int G[505][505];
vector<int> g[505];
int vis[555];
char s[555];
int dfs(int u, int c) {
  if (~vis[u]) return vis[u] == c;
  vis[u] = c;
  int i;
  int ret = 1;
  for (i = 0; i < g[u].size(); i++) {
    ret &= dfs(g[u][i], c ^ 1);
  }
  return ret;
}
int main() {
  if (0)
    freopen(
        ""
        ".in",
        "r", stdin);
  if (0)
    freopen(
        ""
        ".out",
        "w", stdout);
  int i, j, k, _T;
  int n, m;
  while (~scanf("%d%d", &n, &m)) {
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++)
        if (i != j) G[i][j] = 1;
    while (m--) {
      int u, v;
      scanf("%d%d", &u, &v);
      G[u][v] = G[v][u] = 0;
    }
    for (i = 1; i <= n; i++) g[i].clear();
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++)
        if (G[i][j]) g[i].push_back(j);
    memset(vis, -1, sizeof vis);
    int flag = 1;
    for (i = 1; i <= n; i++)
      if (vis[i] == -1 && !g[i].empty()) {
        flag &= dfs(i, 0);
      }
    for (i = 1; i <= n; i++) {
      if (vis[i] == 0)
        s[i] = 'a';
      else if (vis[i] == 1)
        s[i] = 'c';
      else
        s[i] = 'b';
    }
    for (i = 1; i <= n; i++)
      for (j = i + 1; j <= n; j++) {
        if (G[i][j]) {
          if (s[i] == 'a' && s[j] == 'c') {
          } else if (s[i] == 'c' && s[j] == 'a') {
          } else {
            flag = 0;
          }
        } else {
          if (s[i] == 'a' && s[j] == 'c') {
            flag = 0;
          } else if (s[i] == 'c' && s[j] == 'a') {
            flag = 0;
          } else {
          }
        }
      }
    if (flag) {
      puts("Yes");
      for (i = 1; i <= n; i++) {
        putchar(s[i]);
      }
      printf("\n");
    } else
      puts("No");
  }
  return 0;
}
