#include <bits/stdc++.h>
using namespace std;
bool arr[505][505];
set<int> A, B, C;
int main() {
  int n, m, i;
  int a, c;
  cin >> n >> m;
  for (i = 0; i < m; i++) {
    scanf("%d%d", &a, &c);
    arr[a][c] = arr[c][a] = 1;
  }
  if (m == (n * (n - 1)) / 2) {
    printf("Yes\n");
    for (i = 0; i < n; i++) printf("a");
    return 0;
  }
  for (i = 1; i < n; i++) {
    int flag = 0;
    for (int j = i + 1; j <= n; j++) {
      if (arr[i][j] == 0) {
        a = i;
        c = j;
        flag = 1;
        break;
      }
    }
    if (flag) break;
  }
  A.insert(a);
  C.insert(c);
  int ansf = 0;
  for (i = 1; i <= n; i++) {
    if (i == a || i == c) continue;
    if (arr[a][i] && arr[i][c])
      B.insert(i);
    else if (arr[a][i])
      A.insert(i);
    else if (arr[i][c])
      C.insert(i);
    else {
      ansf = 1;
      break;
    }
  }
  if (ansf) {
    printf("No");
    return 0;
  }
  for (i = 1; i < n; i++) {
    for (int j = i + 1; j <= n; j++) {
      if (arr[i][j]) {
        if (A.find(i) != A.end() && C.find(j) != C.end()) ansf = 1;
        if (A.find(j) != A.end() && C.find(i) != C.end()) ansf = 1;
      } else {
        if ((!(A.find(i) != A.end() && C.find(j) != C.end())) &&
            (!(A.find(j) != A.end() && C.find(i) != C.end())))
          ansf = 1;
      }
      if (ansf) break;
    }
    if (ansf) break;
  }
  if (ansf) {
    printf("No\n");
    return 0;
  }
  printf("Yes\n");
  for (i = 1; i <= n; i++) {
    if (A.find(i) != A.end()) printf("a");
    if (B.find(i) != B.end()) printf("b");
    if (C.find(i) != C.end()) printf("c");
  }
  return 0;
}
