#include <bits/stdc++.h>
using namespace std;
void optimise() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}
unsigned long long int mod = 1e9 + 7;
void normalize(unsigned long long int &a) { a = (a + mod) % mod; }
unsigned long long int modmul(unsigned long long int a,
                              unsigned long long int b) {
  a = a % mod;
  b = b % mod;
  normalize(a);
  normalize(b);
  return (a * b) % mod;
}
unsigned long long int modadd(unsigned long long int a,
                              unsigned long long int b) {
  a = a % mod;
  b = b % mod;
  normalize(a);
  normalize(b);
  return (a + b) % mod;
}
unsigned long long int modsub(unsigned long long int a,
                              unsigned long long int b) {
  a = a % mod;
  b = b % mod;
  normalize(a);
  normalize(b);
  return (a - b + mod) % mod;
}
unsigned long long int me(unsigned long long int x, unsigned long long int n) {
  x %= mod;
  if (n == 0) return 1;
  unsigned long long int u = me(x, n / 2) % mod;
  u = (u * u) % mod;
  if (n % 2) u = (u * x) % mod;
  return u;
}
unsigned long long int me1(unsigned long long int x, unsigned long long int n) {
  if (n == 0) return 1;
  unsigned long long int u = me1(x, n / 2);
  u = u * u;
  if (n % 2) u = u * x;
  return u;
}
inline unsigned long long int fact(unsigned long long int r) {
  unsigned long long int ans = 1;
  while (r) ans = modmul(ans, r), r--;
  return ans;
}
inline unsigned long long int modInv(unsigned long long int a) {
  return me(a, mod - 2);
}
inline unsigned long long int modDiv(unsigned long long int a,
                                     unsigned long long int b) {
  return modmul(a, modInv(b));
}
unsigned long long int __gcd(unsigned long long int a,
                             unsigned long long int b) {
  if (b == 0)
    return a;
  else
    return __gcd(b, a % b);
}
const unsigned long long int N = 5e5 + 1;
vector<unsigned long long int> vis(N);
vector<unsigned long long int> G[N];
void dfs(unsigned long long int v, unsigned long long int f) {
  vis[v] = f;
  for (auto y : G[v])
    if (vis[y] == 0) dfs(y, f);
}
void solve() {
  unsigned long long int n, m;
  cin >> n >> m;
  vector<unsigned long long int> v1(n + 1);
  for (unsigned long long int i = 0; i < m; i++) {
    unsigned long long int x1, x2;
    cin >> x1 >> x2;
    G[x1].push_back(x2);
    G[x2].push_back(x1);
    v1[x1]++;
    v1[x2]++;
  }
  for (unsigned long long int i = 1; i <= n; i++) {
    if (v1[i] == n - 1) {
      vis[i] = 2;
    }
  }
  unsigned long long int f = 2;
  for (unsigned long long int i = 1; i <= n; i++) {
    if (vis[i] == 0) {
      f++;
      if (f > 4) {
        cout << "No";
        return;
      }
      dfs(i, f);
    }
  }
  unsigned long long int a1 = 0;
  unsigned long long int c1 = 0;
  unsigned long long int b1 = 0;
  for (unsigned long long int i = 1; i <= n; i++) {
    if (vis[i] == 3)
      a1++;
    else if (vis[i] == 2)
      b1++;
    else
      c1++;
  }
  unsigned long long int k = b1 * (b1 - 1) / 2 + c1 * (c1 - 1) / 2 +
                             a1 * (a1 - 1) / 2 + b1 * (a1 + c1);
  if (m != k) {
    cout << "No";
    return;
  }
  cout << "Yes"
       << "\n";
  for (unsigned long long int i = 1; i <= n; i++) {
    if (vis[i] == 3)
      cout << "a";
    else if (vis[i] == 2)
      cout << "b";
    else
      cout << "c";
  }
}
signed main() {
  optimise();
  unsigned long long int t;
  t = 1;
  while (t--) {
    solve();
    cout << "\n";
  }
}
