#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> adjs[510];
char type[510];
bool visited[510];
int dfs(int v, int adj, char c) {
  visited[v] = true;
  type[v] = c;
  int totV = 1;
  for (int i = 0; i < (adj); i++) {
    int adjV = adjs[v][i];
    if (!visited[adjV] && adjs[adjV].size() == adj) totV += dfs(adjV, adj, c);
  }
  return totV;
}
int main(int argc, char **argv) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  for (int var = 0; var < (n); var++) type[var] = ('x');
  for (int var = 0; var < (n); var++) visited[var] = (false);
  for (int i = 0; i < (m); i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    adjs[u].push_back(v);
    adjs[v].push_back(u);
  }
  int adja = -1, adjb = n - 1, adjc = -1;
  int na = 0, nb = 0, nc = 0;
  bool pos = true;
  for (int i = 0; i < (n); i++) {
    int k = adjs[i].size();
    if (k == adjb) {
      nb++;
      type[i] = 'b';
      visited[i] = true;
    } else if (!visited[i]) {
      if (na == 0) {
        adja = adjs[i].size();
        na = dfs(i, adja, 'a');
      } else if (nc == 0) {
        adjc = adjs[i].size();
        nc = dfs(i, adjc, 'c');
      } else
        pos = false;
    }
  }
  type[n] = '\0';
  if (pos && na + nb + nc == n && (adja == -1 || adja == na + nb - 1) &&
      (adjc == -1 || adjc == nb + nc - 1)) {
    cout << ("Yes") << "\n";
    cout << (type) << "\n";
  } else {
    cout << ("No") << "\n";
  }
  return 0;
}
