#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const int N = 506;
bool mat[N][N], vis[N];
int ind[N];
char str[N];
bool success;
int n, m;
void Dfs(int u) {
  if (success == false) return;
  for (int i = 1; i <= n; i++) {
    if (i == u || mat[u][i] == false) continue;
    if (str[i] != '.') {
      if (str[i] == str[u]) {
        success = false;
        return;
      }
    } else {
      if (str[u] == 'a')
        str[i] = 'c';
      else
        str[i] = 'a';
      Dfs(i);
    }
  }
}
int main() {
  memset(mat, true, sizeof(mat));
  memset(str, '.', sizeof(str));
  memset(ind, 0, sizeof(ind));
  scanf("%d %d", &n, &m);
  for (int i = 0, u = 0, v = 0; i < m; i++) {
    scanf("%d %d", &u, &v);
    mat[u][v] = mat[v][u] = false;
  }
  for (int i = 1; i < n; i++) {
    for (int j = i + 1; j <= n; j++) {
      if (mat[i][j]) {
        ind[i]++;
        ind[j]++;
      }
    }
  }
  success = true;
  for (int i = 1; i <= n && success; i++) {
    if (ind[i] == 0) continue;
    if (str[i] == '.') {
      str[i] = 'a';
      Dfs(i);
    }
  }
  if (success == false)
    puts("No");
  else {
    for (int i = 1; i <= n; i++) {
      if (str[i] == '.') str[i] = 'b';
    }
    str[n + 1] = 0;
    for (int i = 1; i < n && success; i++) {
      for (int j = i + 1; j <= n && success; j++) {
        if (mat[i][j] &&
            !(str[i] == 'a' && str[j] == 'c' || str[i] == 'c' && str[j] == 'a'))
          success = false;
        else if (!mat[i][j] && (str[i] == 'a' && str[j] == 'c' ||
                                str[i] == 'c' && str[j] == 'a'))
          success = false;
      }
    }
    if (success == false)
      puts("No");
    else {
      puts("Yes");
      puts(str + 1);
    }
  }
  return 0;
}
