#include <bits/stdc++.h>
using namespace std;
int color[605], MP[605][605];
vector<int> G[605 + 5];
vector<int> OG[605 + 5];
bool BC(int s) {
  queue<int> Q;
  int f = 0;
  color[s] = 0;
  Q.push(s);
  while (!Q.empty()) {
    int p = Q.front();
    Q.pop();
    int sz = G[p].size();
    for (int i = 0; i < sz; i++) {
      int v = G[p][i];
      if (color[v] == -1) {
        if (color[p] == 0) {
          color[v] = 1;
        } else
          color[v] = 0;
        Q.push(v);
      } else {
        if (color[v] == color[p]) {
          f = 1;
          break;
        }
      }
    }
    if (f == 1) break;
  }
  if (f == 1) return false;
  return true;
}
int main() {
  int n, m, tc, x, y, q, cs = 1, d, l, a, b;
  tc = 1;
  while (tc--) {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i++) {
      scanf("%d%d", &x, &y);
      MP[x][y] = 1;
      MP[y][x] = 1;
    }
    for (int i = 1; i <= n; i++) {
      for (int j = i + 1; j <= n; j++) {
        if (!MP[i][j]) {
          G[i].push_back(j);
          G[j].push_back(i);
        }
      }
    }
    memset(color, -1, sizeof(color));
    int f = 1;
    for (int i = 1; i <= n; i++) {
      if ((int)(G[i].size()) && color[i] == -1) {
        f &= BC(i);
      }
    }
    if (!f)
      printf("No\n");
    else {
      int ok = 1;
      for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
          if (MP[i][j]) {
            if (color[i] == 0 && color[j] == 1) ok = 0;
            if (color[i] == 1 && color[j] == 0) ok = 0;
          }
        }
      }
      if (ok == 0)
        printf("No\n");
      else {
        printf("Yes\n");
        for (int i = 1; i <= n; i++) {
          if (color[i] == -1)
            printf("b");
          else if (color[i] == 0)
            printf("a");
          else
            printf("c");
        }
        printf("\n");
      }
    }
  }
  return 0;
}
