RT
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
//#define int long long
#define pb push_back
using namespace std;
inline int read()
{
int sum=0,ff=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') ff=-1;
ch=getchar();
}
while(isdigit(ch))
sum=sum*10+(ch^48),ch=getchar();
return sum;
}
const int N=505;
char ans[N];
int out[N],n,m,pos,vis[N];
vector<int> G[N];
inline void dfs(int u,int op)
{
if(op==1) ans[u]='a';
if(op==2) ans[u]='c';
for ( int i=0;i<G[u].size();i++ )
{
int v=G[u][i];
if(ans[v]) continue;
if(ans[u]==ans[v])
{
printf("No\n");
exit(0);
}
if(pos&&v==pos) continue;
if(pos&&u==pos) continue;
dfs(v,op);
}
}
int main()
{
n=read();
m=read();
for ( int i=1;i<=m;i++ )
{
int x,y;
x=read();
y=read();
G[x].pb(y);
G[y].pb(x);
out[x]++;
out[y]++;
}
for ( int i=1;i<=n;i++ )
if(out[i]==n-1) ans[i]='b';
int kuai=0;
for ( int i=1;i<=n;i++ )
if(!ans[i])
{
kuai++;
dfs(i,kuai);
}
if(kuai>2) return printf("No"),0;
for ( int i=1;i<=n;i++ )
for ( int j=0;j<G[i].size();j++ )
{
int v=G[i][j];
if(ans[i]!=ans[v]&&ans[i]!='b'&&ans[v]!='b') return printf("No"),0;
if(!ans[i]||!ans[v]) return printf("No"),0;
}
puts("Yes");
for ( int i=1;i<=n;i++ ) putchar(ans[i]);
return 0;
}