#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
vector<int> g[512];
int G[512][512], N, M, cn[512], a, b, q[512], x;
char s[512], L('a');
bool fc(int I) {
  int S(0);
  for (int i(0); i < N; i++) S += G[I][i];
  return S == N - 1;
}
int nc() {
  for (int i(0); i < N; i++)
    if (!s[i]) return i;
  return -1;
}
bool dfs(int u, char c) {
  if (s[u]) return s[u] == c || s[u] == 'b';
  s[u] = c;
  for (int h : g[u])
    if (!dfs(h, G[u][h] ? c : c == 'a' ? 'c' : 'a')) return 0;
  return 1;
}
bool tst() {
  for (int i(0); i < N; i++)
    for (int k(i + 1); k < N; k++)
      if (!s[i] || !s[k] || (abs(s[i] - s[k]) == 2 && G[i][k]) ||
          (abs(s[k] - s[i]) < 2 && !G[i][k]))
        return 0;
  return 1;
}
int main(void) {
  scanf("%d%d", &N, &M);
  for (int i(0); i < M; i++)
    scanf("%d%d", &a, &b), g[--a].push_back(--b), g[b].push_back(a),
        G[a][b] = G[b][a] = 1;
  for (int i(0); i < N; i++)
    if (fc(i)) s[i] = 'b';
  if (~(x = nc())) dfs(x, 'a');
  if (~(x = nc())) dfs(x, 'c');
  if (!tst())
    printf("No\n");
  else
    printf("Yes\n%s\n", s);
  return 0;
}
