#include <bits/stdc++.h>
std::vector<int> work(int n, const std::vector<std::vector<bool>> graph) {
  std::vector<int> result(n, -1);
  for (int i = 0; i < n; i++) {
    bool vaild = true;
    for (int j = 0; j < n; j++) {
      vaild &= graph[i][j];
    }
    if (vaild) {
      result[i] = 1;
    }
  }
  int x = std::find(result.begin(), result.end(), -1) - result.begin();
  result[x] = 0;
  for (int i = 0; i < n; i++) {
    if (result[i] == -1) {
      result[i] = graph[x][i] ? 0 : 2;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (graph[i][j] && std::abs(result[i] - result[j]) == 2) {
        return {};
      } else if (!graph[i][j] && std::abs(result[i] - result[j]) <= 1) {
        return {};
      }
    }
  }
  return result;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  std::vector<std::vector<bool>> graph(n, std::vector<bool>(n, false));
  for (int i = 0; i < n; i++) {
    graph[i][i] = true;
  }
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    graph[u][v] = graph[v][u] = true;
  }
  if (m == n * (n - 1) / 2) {
    puts("Yes");
    for (int i = 0; i < n; i++) {
      putchar('a');
    }
    return puts(""), 0;
  }
  std::vector<int> result = work(n, graph);
  if (result.empty()) {
    puts("No");
  } else {
    puts("Yes");
    for (int i = 0; i < n; i++) {
      putchar('a' + result[i]);
    }
    puts("");
  }
  return 0;
}
