#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define MOD 1000000007

using namespace std;

int graph[505][505],visited[505];
//vector<int> adj[505];
char ans[505];
/*void dfs(int i)
{
    visited[i]=1;
    for(int j=0;j<adj[i].size();j++)
    {
        if(!visited[adj[i][j]])
            dfs(adj[i][j]);
    }
}*/

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int u,v;
        cin>>u>>v;
        //adj[u].push_back(v);
        //adj[v].push_back(u);
        graph[u][v]=1;
        graph[v][u]=1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(!graph[i][j]){
                for(int k=j+1;k<=n;k++)
                {
                    if(!graph[i][k]){
                        if(!graph[j][k])
                        {
                            //cout<<j<<" "<<k;
                            cout<<"No";
                            return 0;
                        }
                    }
                }
            }
        }
    }
    cout<<"Yes\n";
    /*dfs(1);
    for(int i=1;i<=n;i++)
    {
        if(visited[i])
            cout<<"a";
        else
            cout<<"c";
    }*/
    for(int i=1;i<=n;i++)
        ans[i]='b';
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(!graph[i][j])
            {
                if(ans[i]=='a')
                {
                    ans[j]='c';
                }
                else if(ans[i]=='c')
                {
                    ans[j]='a';
                }
                else
                {
                    ans[i]='a';
                    ans[j]='c';
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<ans[i];
    }
    return 0;
}


#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define MOD 1000000007

using namespace std;

int graph[505][505],visited[505];
//vector<int> adj[505];
char ans[505];
/*void dfs(int i)
{
    visited[i]=1;
    for(int j=0;j<adj[i].size();j++)
    {
        if(!visited[adj[i][j]])
            dfs(adj[i][j]);
    }
}*/

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int u,v;
        cin>>u>>v;
        //adj[u].push_back(v);
        //adj[v].push_back(u);
        graph[u][v]=1;
        graph[v][u]=1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(!graph[i][j]){
                for(int k=j+1;k<=n;k++)
                {
                    if(!graph[i][k]){
                        if(!graph[j][k])
                        {
                            //cout<<j<<" "<<k;
                            cout<<"No";
                            return 0;
                        }
                    }
                }
            }
        }
    }

    /*dfs(1);
    for(int i=1;i<=n;i++)
    {
        if(visited[i])
            cout<<"a";
        else
            cout<<"c";
    }*/
    for(int i=1;i<=n;i++)
        ans[i]='b';
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(!graph[i][j])
            {
                if(ans[i]=='a')
                {
                    ans[j]='c';
                }
                else if(ans[i]=='c')
                {
                    ans[j]='a';
                }
                else
                {
                    ans[i]='a';
                    ans[j]='c';
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(graph[i][j])
            {
                if(ans[i]=='a')
                {
                    if(ans[j]=='c')
                    {
                        cout<<"No";
                        return 0;
                    }
                }
                else if(ans[i]=='c')
                {
                    if(ans[j]=='a')
                    {
                        cout<<"No";
                        return 0;
                    }
                }
            }
            else
            {
                if(ans[i]=='b')
                {
                    cout<<"No";
                    return 0;
                }
                else if(ans[i]=='a')
                {
                    if(ans[j]=='a'||ans[j]=='b')
                    {
                        cout<<"No";
                        return 0;
                    }
                }
                else if(ans[i]=='c')
                {
                    if(ans[j]=='c'||ans[j]=='b')
                    {
                        cout<<"No";
                        return 0;
                    }
                }
            }
        }
    }
    cout<<"Yes\n";
    for(int i=1;i<=n;i++)
    {
        cout<<ans[i];
    }
    return 0;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    if(m==0)
    {
        if(n==1)
        {
            printf("Yes\na\n");
            return 0;
        }
        else if(n==2)
        {
            printf("Yes\nac\n");
            return 0;
        }
        else
        {
            printf("No\n");
            return 0;
        }
    }
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    //cout<<bcnt<<" "<<ccnt<<endl;
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        aha.pop();
        if(use[gg]==1)
            continue;
        aha.pop();
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=3;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt-1)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt-1)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

struct II
{int from,to;}qc[maxn];

vector<int> G[maxn];
int flag,n,m;
int num[maxn];

int dfs(int loca);
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
        qc[i].from=u,qc[i].to=v;
    }
    memset(num,0,sizeof(num));
    flag=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()>2)
        {
            flag=-1;
            break;
        }
        else if(G[i].size()==2)
            num[i]=2;
    }
    if(flag==-1)
    {
        printf("No\n");
        return 0;
    }
    dfs(0);
    if(flag==1)
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    else
        printf("No\n");
    return 0;
}

int dfs(int loca)
{
    if(flag==1)
        return 0;
    if(loca==n+1)
    {
        if(judge()==-1)
            return 0;
        else
            flag=1;
        return 0;
    }
    for(int i=1;i<=3;i++)
    {
        if(G[i].size()<2)
            num[loca]=i;
        dfs(loca+1);
        if(flag==1)
            return 0;
    }
    return 0;
}

int judge()
{
    for(int i=0;i<m;i++)
    {
        int u=qc[i].from,v=qc[i].to;
        if(num[u]==1 && num[v]==3)
            return -1;
        if(num[u]==3 && num[v]==1)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    if(m==0)
    {
        if(n==1)
        {
            printf("Yes\na\n");
            return 0;
        }
        else if(n==2)
        {
            printf("Yes\nac\n");
            return 0;
        }
        else
        {
            printf("No\n");
            return 0;
        }
    }
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    //cout<<bcnt<<" "<<ccnt<<endl;
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        if(use[gg]==1)
            continue;
        aha.pop();
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=3;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt-1)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt-1)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    if(m==0)
    {
        if(n==1)
        {
            printf("Yes\na\n");
            return 0;
        }
        else if(n==2)
        {
            printf("Yes\nac\n");
            return 0;
        }
        else
        {
            printf("No\n");
            return 0;
        }
    }
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    //cout<<bcnt<<" "<<ccnt<<endl;
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        aha.pop();
        if(use[gg]==1)
            continue;
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=3;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt-1)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt-1)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

struct II
{int from,to;}qc[maxn];

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
        qc[i].from=u,qc[i].to=v;
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        if(use[gg]==1)
            continue;
        aha.pop();
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=2;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    //cout<<bcnt<<" "<<ccnt<<endl;
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        if(use[gg]==1)
            continue;
        aha.pop();
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=3;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt-1)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt-1)
            return -1;
    }
    return 1;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <vector>
#include <queue>

using namespace std;
typedef long long LL;
const int maxn=509;
const LL inf=1e8+9;

vector<int> G[maxn];
int flag,n,m,ccnt,bcnt;
int num[maxn];
int use[maxn];

int dfs();
int judge();

int main()
{
    scanf("%d%d",&n,&m);
    if(m==0)
    {
        if(n==1)
        {
            printf("Yes\na\n");
            return 0;
        }
        else if(n==2)
        {
            printf("Yes\nac\n");
            return 0;
        }
        else
        {
            printf("No\n");
            return 0;
        }
    }
    for(int i=0;i<m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    memset(num,0,sizeof(num));
    memset(use,0,sizeof(use));
    flag=0;
    bcnt=ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(G[i].size()==n-1)
        {
            num[i]=2;
            use[i]=1;
            bcnt++;
        }
    }
    dfs();
    int ans=judge();
    if(ans==-1)
        printf("No\n");
    else
    {
        printf("Yes\n");
        for(int i=1;i<=n;i++)
            printf("%c",(char)(num[i]-1+'a'));
        printf("\n");
    }
    return 0;
}

int dfs()
{
    int st=-1;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            st=i;
            break;
        }
    }
    if(st==-1)
        return 0;
    queue<int> aha;
    while(!aha.empty())
        aha.pop();
    aha.push(st);
    while(!aha.empty())
    {
        int gg=aha.front();
        aha.pop();
        if(use[gg]==1)
            continue;
        use[gg]=1;
        num[gg]=1;
        int lenn=G[gg].size();
        for(int i=0;i<lenn;i++)
        {
            if(use[G[gg][i]]==1)
                continue;
            use[G[gg][i]]=1;
            num[G[gg][i]]=1;
            aha.push(G[gg][i]);
        }
    }
    ccnt=0;
    for(int i=1;i<=n;i++)
    {
        if(use[i]==0)
        {
            use[i]=1;
            num[i]=3;
            ccnt++;
        }
    }
    return 0;
}

int judge()
{
    for(int i=1;i<=n;i++)
    {
        int lenn=G[i].size();
        if(num[i]==1 && lenn!=n-ccnt-1)
            return -1;
        if(num[i]==3 && lenn!=ccnt+bcnt-1)
            return -1;
    }
    return 1;
}


//Must so
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<ctype.h>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<cmath>
#define mem(a,x) memset(a,x,sizeof(a))
#define ex(x) ((x)*(x))
#define inf 1<<29
#define NN 503
using namespace std;
const double PI = acos(-1.0);
typedef long long LL;
bool mp[NN][NN];//��¼���Ƿ���ͨ
int n,m;
char s[NN];//ÿ�������ĸ

//�������ĵ������a-c����c-a
void init()
{
    mem(mp,0);
    for (int i = 0,u,v;i < m;i++)
    {
        scanf("%d%d",&u,&v);
        mp[u][v] = 1;
        mp[v][u] = 1;
    }
}
inline bool check(char a,char b)
{
    if (a == 'a'&&b == 'c') return 1;
    if (a == 'c'&&b == 'a') return 1;
    return 0;
}
bool dfs(int p)//�����p����
{
    if (p > n)
    {
        for (int i = 1;i <= n;i++)
        {
            for (int j = 1;j <= n;j++)
            {
                if (i == j) continue;
                if (mp[i][j] == 0)//������
                {
                    if (!check(s[i],s[j])) return 0;
                }
                else //����
                {
                    if (check(s[i],s[j])) return 0;
                }
            }
        }
        return 1;
    }
    s[p] = 'a';
    if (dfs(p+1)) return 1;
    s[p] = 'b';
    if (dfs(p+1)) return 1;
    s[p] = 'c';
    if (dfs(p+1)) return 1;
    return 0;
}
int main()
{
    while (cin>>n>>m)
    {
        init();
        if (dfs(1))
        {
            puts("Yes");
            for (int i = 1;i <= n;i++)
                printf("%c",s[i]);
            puts("");
        }
        else puts("No");
    }
    return 0;
}


//Must so
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<ctype.h>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<cmath>
#define mem(a,x) memset(a,x,sizeof(a))
#define ex(x) ((x)*(x))
#define inf 1<<29
#define NN 503
using namespace std;
const double PI = acos(-1.0);
typedef long long LL;
bool mp[NN][NN];//��¼���Ƿ���ͨ
int n,m;
char s[NN];//ÿ�������ĸ

//�������ĵ������a-c����c-a
void init()
{
    mem(mp,0);
    for (int i = 0,u,v;i < m;i++)
    {
        scanf("%d%d",&u,&v);
        mp[u][v] = 1;
        mp[v][u] = 1;
    }
    for (int i = 0;i <= n;i++)
    {
         mp[i][i] = 1;
         s[i] = 'b';
    }
}

bool fool()
{
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            if (mp[i][j] == 0)
            {
                if (s[i] == 'b')
                {
                    if (s[j] == 'b') s[i] = 'a',s[j] = 'c';
                    else if (s[j] == 'a') s[i] = 'c';
                    else if (s[j] == 'c') s[i] = 'a';
                }
                else if (s[i] == 'a')
                {
                    if (s[j] == 'b') s[j] = 'c';
                    else if (s[j] == 'a') return 0;
                }
                else if (s[i] == 'c')
                {
                    if (s[j] == 'b') s[j] = 'a';
                    else if (s[j] == 'c') return 0;
                }
            }
        }
    }
    return 1;
}
int main()
{
    while (cin>>n>>m)
    {
        init();
        if (fool())
        {
            puts("Yes");
            for (int i = 1;i <= n;i++) printf("%c",s[i]);
            puts("");
        }
        else puts("No");
    }
    return 0;
}


//Must so
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<ctype.h>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<cmath>
#define mem(a,x) memset(a,x,sizeof(a))
#define ex(x) ((x)*(x))
#define inf 1<<29
#define NN 503
using namespace std;
const double PI = acos(-1.0);
typedef long long LL;
bool mp[NN][NN];//��¼���Ƿ���ͨ
int n,m;
char s[NN];//ÿ�������ĸ

//�������ĵ������a-c����c-a
void init()
{
    mem(mp,0);
    for (int i = 0,u,v;i < m;i++)
    {
        scanf("%d%d",&u,&v);
        mp[u][v] = 1;
        mp[v][u] = 1;
    }
    for (int i = 0;i <= n;i++)
    {
         mp[i][i] = 1;
         s[i] = 'b';
    }
}
inline bool check(char a,char b)
{
    if (a == 'a'&&b == 'c') return 1;
    if (a == 'c'&&b == 'a') return 1;
    return 0;
}
bool fool()
{
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            if (mp[i][j] == 0)
            {
                if (s[i] == 'b')
                {
                    if (s[j] == 'b') s[i] = 'a',s[j] = 'c';
                    else if (s[j] == 'a') s[i] = 'c';
                    else if (s[j] == 'c') s[i] = 'a';
                }
                else if (s[i] == 'a')
                {
                    if (s[j] == 'b') s[j] = 'c';
                    else if (s[j] == 'a') return 0;
                }
                else if (s[i] == 'c')
                {
                    if (s[j] == 'b') s[j] = 'a';
                    else if (s[j] == 'c') return 0;
                }
            }
        }
    }
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            if (mp[i][j])//����
            {
                if (check(s[i],s[j])) return 0;
            }
            else
            {
                if (!check(s[i],s[j])) return 0;
            }
        }
    }
    return 1;
}
int main()
{
    while (cin>>n>>m)
    {
        init();
        if (fool())
        {
            puts("Yes");
            for (int i = 1;i <= n;i++) printf("%c",s[i]);
            puts("");
        }
        else puts("No");
    }
    return 0;
}


//Must so
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<ctype.h>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<cmath>
#define mem(a,x) memset(a,x,sizeof(a))
#define ex(x) ((x)*(x))
#define inf 1<<29
#define NN 5003
using namespace std;
const double PI = acos(-1.0);
typedef long long LL;
int mp[NN][NN];
int n,m;
void init()
{
    for (int i = 0;i <= n;i++)
    {
        for (int j = 0;j <= n;j++)
        {
            mp[i][j] = inf;
        }
    }
}
int main()
{
    while (cin>>n>>m)
    {
        init();
        for (int i = 0,a,b;i < m;i++)
        {
            scanf("%d%d",&a,&b);
            mp[a][b] = 0;
            mp[b][a] = 0;
        }
        int sun1 = 0,sun2 = 0;
        int pos1,pos2;
        for (int i = 1,sun;i <= n;i++)
        {
            sun = 0;
            for (int j = 1;j <= n;j++)
            {
                if (mp[i][j] == 0) sun++;
            }
            if (sun == n-2)
            {
                sun1++;
                pos1 = i;
            }
            if (sun < n-2)
            {
                sun2++;
                pos2 = i;
            }

        }
        if (sun1 == 0&&sun2 == 0)
        {
            puts("Yes");
            for (int i = 0;i < n;i++)
                printf("a");
            puts("");
        }
        else if (sun1 == 2&&sun2 == 0)
        {
            puts("Yes");
            bool first = 1;
            for (int i = 1;i <= n;i++)
            {
                if (mp[pos1][i] == inf)
                {
                    if (first)
                    {
                        printf("a");
                        first = 0;
                    }
                    else
                    {
                        printf("c");
                    }
                }
                else
                {
                    printf("b");
                }
            }
            puts("");
        }
        else if (sun2 == 1)
        {
            puts("Yes");
            for (int i = 1;i <= n;i++)
            {
                if (mp[pos2][i] == inf)
                {
                    if (i == pos2)
                    {
                        printf("a");
                    }
                    else
                    {
                        printf("c");
                    }
                }
                else printf("b");
            }
            puts("");
        }
        else puts("No");
    }
    return 0;
}


//Must so
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<ctype.h>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<cmath>
#define mem(a,x) memset(a,x,sizeof(a))
#define ex(x) ((x)*(x))
#define inf 1<<29
#define NN 503
using namespace std;
const double PI = acos(-1.0);
typedef long long LL;
bool mp[NN][NN];//��¼���Ƿ���ͨ
int n,m;
char s[NN];//ÿ�������ĸ

//�������ĵ������a-c����c-a
void init()
{
    mem(mp,0);
    for (int i = 0,u,v;i < m;i++)
    {
        scanf("%d%d",&u,&v);
        mp[u][v] = 1;
        mp[v][u] = 1;
    }
}
inline bool check(char a,char b)
{
    if (a == 'a'&&b == 'c') return 1;
    if (a == 'c'&&b == 'a') return 1;
    return 0;
}
bool dfs(int p)//�����p����
{
    if (p > n)
    {
        for (int i = 1;i <= n;i++)
        {
            for (int j = 1;j <= n;j++)
            {
                if (i == j) continue;
                if (mp[i][j] == 0)
                {
                    if (!check(s[i],s[j])) return 0;
                }
            }
        }
        return 1;
    }
    s[p] = 'a';
    if (dfs(p+1)) return 1;
    s[p] = 'b';
    if (dfs(p+1)) return 1;
    s[p] = 'c';
    if (dfs(p+1)) return 1;
    return 0;
}
int main()
{
    while (cin>>n>>m)
    {
        init();
        if (dfs(1))
        {
            puts("Yes");
            for (int i = 1;i <= n;i++)
                printf("%c",s[i]);
            puts("");
        }
        else puts("No");
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}

if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    for(it1=s.begin();it1!=s.end();it1++)cout<<"a";
        for(it3=s1.begin();it3!=s1.end();it3++)cout<<"b";
        for(it5=s2.begin();it5!=s2.end();it5++)cout<<"c";

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(!mat[*it3][*it4])p=1;
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1])p=1;
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6])p=1;
}
}
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it3][*it1])p=1;
}
}
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it5=s2.begin();it5!=s2.end();it5++)
{
   if(!mat[*it3][*it5])p=1;
}
}
if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    for(it1=s.begin();it1!=s.end();it1++)cout<<"a";
        for(it3=s1.begin();it3!=s1.end();it3++)cout<<"b";
        for(it5=s2.begin();it5!=s2.end();it5++)cout<<"c";

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    if(m==0){cout<<"Yes\na";return 0;}
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}

if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

auto it3=s1.begin();
auto it4=s1.begin();
auto it2=s.begin();
auto it1=s.begin();
auto it5=s2.begin();
auto it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(!mat[*it3][*it4])p=1;
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1])p=1;
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6])p=1;
}
}
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it3][*it1])p=1;
}
}
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(it5=s2.begin();it5!=s2.end();it5++)
{
   if(!mat[*it3][*it5])p=1;
}
}
if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    for(it1=s.begin();it1!=s.end();it1++)cout<<"a";
        for(it3=s1.begin();it3!=s1.end();it3++)cout<<"b";
        for(it5=s2.begin();it5!=s2.end();it5++)cout<<"c";

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    if(m==0&&n==1){cout<<"Yes\na";return 0;}
    if(m==0&&n==2){cout<<"Yes\nac";return 0;}
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(int i=1;i<=n;i++)
{
   if(mat[*it3][i]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

//check
p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(mat[*it1][*it5]){p=1;}
}
}
if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    if(m==0){cout<<"Yes\na";return 0;}
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(int i=1;i<=n;i++)
{
   if(mat[*it3][i]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

//check
p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(mat[*it1][*it6]){p=1;}
}
}
if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    if(m==0){cout<<"Yes\na";return 0;}
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(int i=1;i<=n;i++)
{
   if(mat[*it3][i]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

//check
p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(mat[*it1][*it5]){p=1;}
}
}
if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}

if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(it4=s1.begin();it4!=s1.end();it4++)
{
   if(mat[*it3][*it4]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}

if(p==1)cout<<"No";
else if(m==0)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
vector<vector<int> >v(600);
set<int>s;
set<int>s1;
set<int>s2;
int mark[600]={0};
void dfs(int u )
{
    mark[u]=1;s1.insert(u);
    for(int i=0;i<v[u].size();i++)
    {
        if(mark[v[u][i]]==0)
        {
          dfs(v[u][i]);
        }
    }
}
int main()
{
    int n,m;
    int mat[502][502]={0};
    for(int i=0;i<502;i++)mat[i][i]=1;
    cin>>n>>m;
    int a,b;
    if(m==0){cout<<"Yes\na";return 0;}
    for(int i=0;i<m;i++)
    {

        cin>>a>>b;
        mat[a][b]=1;
        mat[b][a]=1;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(a);

set<int>::iterator it3=s1.begin();
set<int>::iterator it4=s1.begin();
set<int>::iterator it2=s.begin();
set<int>::iterator it1=s.begin();
set<int>::iterator it5=s2.begin();
set<int>::iterator it6=s2.begin();
int p=0;
for(it3=s1.begin();it3!=s1.end();it3++)
{
    p=0;
    for(int i=1;i<=n;i++)
{
   if(mat[*it3][i]==0)p=1;
}

if(p==1)
{
    int t=0;
    for(it1=s.begin();it1!=s.end();it1++)
    {if(!mat[*it1][*it3])t=1;}
    if(t==0)
    s.insert(*it3);
    else s2.insert(*it3);
}

}
p=0;

for(it1=s.begin();it1!=s.end();it1++)
{
 s1.erase(*it1);
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
 s1.erase(*it5);
}
for(int i=1;i<=n;i++)if(mark[i]==0)s2.insert(i);
p=0;

for(it3=s1.begin();it3!=s1.end();it3++)
{
    for(int i=1;i<=n;i++)
{
   if(!mat[*it3][i]){p=1;}
}
}
for(it2=s.begin();it2!=s.end();it2++)
{
    for(it1=s.begin();it1!=s.end();it1++)
{
   if(!mat[*it2][*it1]){p=1;}
}
}
for(it5=s2.begin();it5!=s2.end();it5++)
{
    for(it6=s2.begin();it6!=s2.end();it6++)
{
   if(!mat[*it5][*it6]){p=1;}
}
}

if(p==1)cout<<"No";
else{
    cout<<"Yes\n";
    char sa[600];
    for(it1=s.begin();it1!=s.end();it1++){int j=*it1;
            sa[j-1]='a';}
        for(it3=s1.begin();it3!=s1.end();it3++){int j=*it3;
        sa[j-1]='b';}
        for(it5=s2.begin();it5!=s2.end();it5++){int j=*it5;
        sa[j-1]='c';}
        cout<<sa;

}

    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ML 1000000000000000007LL
#define INF 1000000000000000007LL
#define DMAX 8
#define PI  3.14159265
#define pb push_back
#define mp make_pair
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef pair<long long,long long> ii;
typedef long long LL;
typedef unsigned long long ULL;
// bool comp(pair<int,int> a,pair<int,int> b)
// {
//    return a.second<b.second;
// }
long long expo(LL a,LL b,LL m){
   LL result = 1;
   while (b){
      if (b&1){
         result=  (result*a)%m;
      }
      b= (b >>1)%m ;
      a= (a*a)%m;
   }
  return result;
}
double expof(double a,int b){
   double result = 1;
   while (b){
      if (b&1){
         result=  (result*a);
      }
      b= (b >>1);
      a= (a*a);
   }
  return result;
}

// int dir[DMAX][2] = {{1, 0}, {1, 1}, {1, -1}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {-1, 0}};
// for (int k = 0; k < DMAX; ++k)
// {
//     int dx = i + dir[k][0];
//     int dy = j + dir[k][1];

//     if (0 <= dx and dx < n and 0 <= dy and dy < n and str[dx][dy] == '*')
//            cnt++;
// }

int main()
{

   int a[600][600];
   memset(a,-1,sizeof a);
   int n,m;
   cin>>n>>m;
   int x,y;
   for (int i = 0; i <m; ++i)
   {
      cin>>x>>y;

      a[min(x,y)][max(y,x)]=1;
   }

   char s[1000];
   for (int i = 0; i <=n; ++i)
   {
      s[i]='x';
   }
   int flag=0;
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==-1)
         {
            if(s[i]=='x'&&s[j]=='x')
            {
               s[i]='a';
               s[j]='c';
            }
            else if(s[i]!='x'&&s[j]=='x')
            {
               if(s[i]=='a')
               {
                  s[j]='c';
               }
               else if(s[i]=='c')
               {
                  s[j]='a';
               }
            }
            else if(s[i]=='x'&&s[j]!='x')
            {
               if(s[j]=='a')
               {
                  s[i]='c';
               }
               else if(s[j]=='c')
               {
                  s[i]='a';
               }
            }
            else if(s[i]!='x'&&s[j]!='x')
            {
               if(s[i]==s[j])
               {
                  flag=1;
                  break;
               }
            }
         }

      }
      if (flag)
      {
         break;
      }
   }
   for (int i =1; i <=n; ++i)
   {
      if(s[i]=='x')
         s[i]='b';
   }
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==1)
         {
            if(s[i]==s[j]||s[i]=='b'||s[j]=='b')
               continue;
            else
            {
               // cout<<s[i]<<" yo "<<s[j]<<endl;
               flag=1;
            }
         }
      }
   }
   if(flag)
      cout<<"No"<<endl;
   else
   {
      cout<<"Yes"<<endl;
      for (int i =1; i <=n; ++i)
      {
         if(s[i]=='x')
            cout<<'b';
         else
            cout<<s[i];
      }
      cout<<endl;

   }

}


#include<bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ML 1000000000000000007LL
#define INF 1000000000000000007LL
#define DMAX 8
#define PI  3.14159265
#define pb push_back
#define mp make_pair
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef pair<long long,long long> ii;
typedef long long LL;
typedef unsigned long long ULL;
// bool comp(pair<int,int> a,pair<int,int> b)
// {
//    return a.second<b.second;
// }
long long expo(LL a,LL b,LL m){
   LL result = 1;
   while (b){
      if (b&1){
         result=  (result*a)%m;
      }
      b= (b >>1)%m ;
      a= (a*a)%m;
   }
  return result;
}
double expof(double a,int b){
   double result = 1;
   while (b){
      if (b&1){
         result=  (result*a);
      }
      b= (b >>1);
      a= (a*a);
   }
  return result;
}

// int dir[DMAX][2] = {{1, 0}, {1, 1}, {1, -1}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {-1, 0}};
// for (int k = 0; k < DMAX; ++k)
// {
//     int dx = i + dir[k][0];
//     int dy = j + dir[k][1];

//     if (0 <= dx and dx < n and 0 <= dy and dy < n and str[dx][dy] == '*')
//            cnt++;
// }

int main()
{

   int a[600][600];
   memset(a,-1,sizeof a);
   int n,m;
   cin>>n>>m;
   int x,y;
   for (int i = 0; i <m; ++i)
   {
      cin>>x>>y;
      a[x][y]=1;
   }

   char s[1000];
   for (int i = 0; i <=n; ++i)
   {
      s[i]='x';
   }
   int flag=0;
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==-1)
         {
            if(s[i]=='x'&&s[j]=='x')
            {
               s[i]='a';
               s[j]='c';
            }
            else if(s[i]!='x'&&s[j]=='x')
            {
               if(s[i]=='a')
               {
                  s[j]='c';
               }
               else if(s[i]=='c')
               {
                  s[j]='a';
               }
            }
            else if(s[i]=='x'&&s[j]!='x')
            {
               if(s[j]=='a')
               {
                  s[i]='c';
               }
               else if(s[j]=='c')
               {
                  s[i]='a';
               }
            }
            else
            {
               if(s[i]==s[j])
               {
                  flag=1;
                  break;
               }
            }
         }

      }
   }
   if(flag)
      cout<<"No"<<endl;
   else
   {
      cout<<"Yes"<<endl;
      for (int i =1; i <=n; ++i)
      {
         if(s[i]=='x')
            cout<<'b';
         else
            cout<<s[i];
      }
      cout<<endl;

   }

}


#include<bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ML 1000000000000000007LL
#define INF 1000000000000000007LL
#define DMAX 8
#define PI  3.14159265
#define pb push_back
#define mp make_pair
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef pair<long long,long long> ii;
typedef long long LL;
typedef unsigned long long ULL;
// bool comp(pair<int,int> a,pair<int,int> b)
// {
//    return a.second<b.second;
// }
long long expo(LL a,LL b,LL m){
   LL result = 1;
   while (b){
      if (b&1){
         result=  (result*a)%m;
      }
      b= (b >>1)%m ;
      a= (a*a)%m;
   }
  return result;
}
double expof(double a,int b){
   double result = 1;
   while (b){
      if (b&1){
         result=  (result*a);
      }
      b= (b >>1);
      a= (a*a);
   }
  return result;
}

// int dir[DMAX][2] = {{1, 0}, {1, 1}, {1, -1}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {-1, 0}};
// for (int k = 0; k < DMAX; ++k)
// {
//     int dx = i + dir[k][0];
//     int dy = j + dir[k][1];

//     if (0 <= dx and dx < n and 0 <= dy and dy < n and str[dx][dy] == '*')
//            cnt++;
// }

int main()
{

   int a[600][600];
   memset(a,-1,sizeof a);
   int n,m;
   cin>>n>>m;
   int x,y;
   for (int i = 0; i <m; ++i)
   {
      cin>>x>>y;
      a[x][y]=1;
   }

   char s[1000];
   for (int i = 0; i <=n; ++i)
   {
      s[i]='x';
   }
   int flag=0;
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==-1)
         {
            if(s[i]=='x'&&s[j]=='x')
            {
               s[i]='a';
               s[j]='c';
            }
            else if(s[i]!='x'&&s[j]=='x')
            {
               if(s[i]=='a')
               {
                  s[j]='c';
               }
               else if(s[i]=='c')
               {
                  s[j]='a';
               }
            }
            else if(s[i]=='x'&&s[j]!='x')
            {
               if(s[j]=='a')
               {
                  s[i]='c';
               }
               else if(s[j]=='c')
               {
                  s[i]='a';
               }
            }
            else
            {
               if(s[i]==s[j])
               {
                  flag=1;
                  break;
               }
            }
         }

      }
      if (flag)
      {
         break;
      }
   }
   if(flag)
      cout<<"No"<<endl;
   else
   {
      cout<<"Yes"<<endl;
      for (int i =1; i <=n; ++i)
      {
         if(s[i]=='x')
            cout<<'b';
         else
            cout<<s[i];
      }
      cout<<endl;

   }

}


#include<bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ML 1000000000000000007LL
#define INF 1000000000000000007LL
#define DMAX 8
#define PI  3.14159265
#define pb push_back
#define mp make_pair
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef pair<long long,long long> ii;
typedef long long LL;
typedef unsigned long long ULL;
// bool comp(pair<int,int> a,pair<int,int> b)
// {
//    return a.second<b.second;
// }
long long expo(LL a,LL b,LL m){
   LL result = 1;
   while (b){
      if (b&1){
         result=  (result*a)%m;
      }
      b= (b >>1)%m ;
      a= (a*a)%m;
   }
  return result;
}
double expof(double a,int b){
   double result = 1;
   while (b){
      if (b&1){
         result=  (result*a);
      }
      b= (b >>1);
      a= (a*a);
   }
  return result;
}

// int dir[DMAX][2] = {{1, 0}, {1, 1}, {1, -1}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {-1, 0}};
// for (int k = 0; k < DMAX; ++k)
// {
//     int dx = i + dir[k][0];
//     int dy = j + dir[k][1];

//     if (0 <= dx and dx < n and 0 <= dy and dy < n and str[dx][dy] == '*')
//            cnt++;
// }

int main()
{

   int a[600][600];
   memset(a,-1,sizeof a);
   int n,m;
   cin>>n>>m;
   int x,y;
   for (int i = 0; i <m; ++i)
   {
      cin>>x>>y;

      a[min(x,y)][max(y,x)]=1;
   }

   char s[1000];
   for (int i = 0; i <=n; ++i)
   {
      s[i]='x';
   }
   int flag=0;
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==-1)
         {
            if(s[i]=='x'&&s[j]=='x')
            {
               s[i]='a';
               s[j]='c';
            }
            else if(s[i]!='x'&&s[j]=='x')
            {
               if(s[i]=='a')
               {
                  s[j]='c';
               }
               else if(s[i]=='c')
               {
                  s[j]='a';
               }
            }
            else if(s[i]=='x'&&s[j]!='x')
            {
               if(s[j]=='a')
               {
                  s[i]='c';
               }
               else if(s[j]=='c')
               {
                  s[i]='a';
               }
            }
            else if(s[i]!='x'&&s[j]!='x')
            {
               if(s[i]==s[j])
               {
                  flag=1;
                  break;
               }
            }
         }

      }
      if (flag)
      {
         break;
      }
   }
   if(flag)
      cout<<"No"<<endl;
   else
   {
      cout<<"Yes"<<endl;
      for (int i =1; i <=n; ++i)
      {
         if(s[i]=='x')
            cout<<'b';
         else
            cout<<s[i];
      }
      cout<<endl;

   }

}


#include<bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ML 1000000000000000007LL
#define INF 1000000000000000007LL
#define DMAX 8
#define PI  3.14159265
#define pb push_back
#define mp make_pair
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef pair<long long,long long> ii;
typedef long long LL;
typedef unsigned long long ULL;
// bool comp(pair<int,int> a,pair<int,int> b)
// {
//    return a.second<b.second;
// }
long long expo(LL a,LL b,LL m){
   LL result = 1;
   while (b){
      if (b&1){
         result=  (result*a)%m;
      }
      b= (b >>1)%m ;
      a= (a*a)%m;
   }
  return result;
}
double expof(double a,int b){
   double result = 1;
   while (b){
      if (b&1){
         result=  (result*a);
      }
      b= (b >>1);
      a= (a*a);
   }
  return result;
}

// int dir[DMAX][2] = {{1, 0}, {1, 1}, {1, -1}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {-1, 0}};
// for (int k = 0; k < DMAX; ++k)
// {
//     int dx = i + dir[k][0];
//     int dy = j + dir[k][1];

//     if (0 <= dx and dx < n and 0 <= dy and dy < n and str[dx][dy] == '*')
//            cnt++;
// }

int main()
{

   int a[600][600];
   memset(a,-1,sizeof a);
   int n,m;
   cin>>n>>m;
   int x,y;
   for (int i = 0; i <m; ++i)
   {
      cin>>x>>y;

      a[min(x,y)][max(y,x)]=1;
   }

   char s[1000];
   for (int i = 0; i <=n; ++i)
   {
      s[i]='x';
   }
   int flag=0;
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==-1)
         {
            if(s[i]=='x'&&s[j]=='x')
            {
               s[i]='a';
               s[j]='c';
            }
            else if(s[i]!='x'&&s[j]=='x')
            {
               if(s[i]=='a')
               {
                  s[j]='c';
               }
               else if(s[i]=='c')
               {
                  s[j]='a';
               }
            }
            else if(s[i]=='x'&&s[j]!='x')
            {
               if(s[j]=='a')
               {
                  s[i]='c';
               }
               else if(s[j]=='c')
               {
                  s[i]='a';
               }
            }
            else if(s[i]!='x'&&s[j]!='x')
            {
               if(s[i]==s[j])
               {
                  flag=1;
                  break;
               }
            }
         }

      }
      if (flag)
      {
         break;
      }
   }
   for (int i =1; i<=n; ++i)
   {
      for (int j =i+1; j <=n; ++j)
      {
         if(a[i][j]==1)
         {
            if(s[i]==s[j]||s[i]=='b'||s[j]=='b')
               continue;
            else
            {
               flag=1;
            }
         }
      }
   }
   if(flag)
      cout<<"No"<<endl;
   else
   {
      cout<<"Yes"<<endl;
      for (int i =1; i <=n; ++i)
      {
         if(s[i]=='x')
            cout<<'b';
         else
            cout<<s[i];
      }
      cout<<endl;

   }

}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int ch[MX];
int col[MX], deg[MX];

int main()
{
	int n, m, u, v;
	scanf("%d %d",&n, &m);
	FOR(i, 0, m) {
		scanf("%d %d",&u, &v);
		a[u][v] = 1;
		a[v][u] = 1;
		deg[u]++;
		deg[v]++;
	}
	if(m == 0) {
		if(n == 1) {
			cout << "Yes" << endl;
			cout << "a" << endl;
		}
		else if(n == 2) {
			cout << "Yes" << endl;
			cout << "ac" << endl;
		}
		else {
			cout << "No" << endl;
		}
		return 0;
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			if(a[i][j]) {
				set < int > s;
				for(int k=1;k<=n;k++) ch[k] = 0;
				for(int k=1;k<=n;k++) {
					if(a[i][k]) {
						ch[k]++;
					}
					if(a[j][k]) {
						ch[k]++;
					}
				}
				int both_same = 1;
				for(int k=1;k<=n;k++) {
					if(i == k || j == k) continue;
					if(ch[k] == 1) both_same = 0;
				}
				if(both_same) {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = col[j] = 1;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i];
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j];
					}
					else {
						if(col[i] != col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
					}
				}
				else {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = 1;
						col[j] = 2;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i] + 1;
						if(col[j] == 4) col[j] = 1;
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j] + 1;
						if(col[i] == 4) col[i] = 1;
					}
					else if(col[i] && col[j]) {
						if(col[i] == col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k] && !a[j][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
						else if(!a[i][k] && a[j][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
					}
				}
			}
		}
	}
	string s = "";
	for(int i=1;i<=n;i++) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	if(s.size() == n) {
		cout << "Yes" << endl;
		cout << s << endl;
	}
	else {
		cout << "No" << endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int col[MX];

int main()
{
	int n, m;
	cin >> n >> m;
	FOR(i, 0, m) {
		int u, v;
		cin >> u >> v;
		a[u][v] = 1;
		a[v][u] = 1;
	}
	FOR(i, 1, n+1) {
		bool isB = true;
		FOR(j, 1, n+1) {
			if(i == j) continue;
			if(!a[i][j]) isB = false;
		}
		if(isB) col[i] = 2;
	}
	FOR(i, 1, n+1) {
		//Assign A
		if(!col[i]) {
			col[i] = 1;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 1;
				}
			}
			break;
		}
	}
	FOR(i, 1, n+1) {
		//Assign C
		if(!col[i]) {
			col[i] = 3;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 3;
				}
			}
		}
	}
	string s = "";
	FOR(i, 1, n+1) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	FOR(i, 1, n+1) {
		FOR(j, 1, n+1) {
			if(i == j) continue;
			int ok1 = a[i][j] == 1;
			int ok2 = abs(s[i-1] - s[j-1]) <= 1;
			int tot = ok1 + ok2;
			if(tot == 1) {
				cout << "No\n";
				return 0;
			}
		}
	}
	cout << "Yes\n" << s << endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int col[MX];

int main()
{
	int n, m;
	cin >> n >> m;
	FOR(i, 0, m) {
		int u, v;
		cin >> u >> v;
		a[u][v] = 1;
	}
	FOR(i, 1, n+1) {
		bool isB = true;
		FOR(j, 1, n+1) {
			if(i == j) continue;
			if(!a[i][j]) isB = false;
		}
		if(isB) col[i] = 2;
	}
	FOR(i, 1, n+1) {
		if(!col[i]) {
			col[i] = 1;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) col[i] = 1;
				else col[i] = 3;
			}
			break;
		}
	}
	string s = "";
	FOR(i, 1, n+1) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	FOR(i, 1, n+1) {
		FOR(j, 1, n+1) {
			if(i == j) continue;
			int ok1 = a[i][j] == 1;
			int ok2 = abs(s[i-1] - s[j-1]) <= 1;
			int tot = ok1 + ok2;
			if(tot == 1) {
				cout << "No\n";
				return 0;
			}
		}
	}
	cout << "Yes\n" << s << endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int ch[MX];
int col[MX];

int main()
{
	int n, m, u, v;
	scanf("%d %d",&n, &m);
	FOR(i, 0, m) {
		scanf("%d %d",&u, &v);
		a[u][v] = 1;
		a[v][u] = 1;
	}
	if(m == 0) {
		if(n == 1) {
			cout << "Yes" << endl;
			cout << "a" << endl;
		}
		else if(n == 2) {
			cout << "Yes" << endl;
			cout << "ac" << endl;
		}
		else {
			cout << "No" << endl;
		}
		return 0;
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			if(a[i][j]) {
				for(int k=1;k<=n;k++) ch[k] = 0;
				for(int k=1;k<=n;k++) {
					if(a[i][k]) {
						ch[k]++;
					}
					if(a[j][k]) {
						ch[k]++;
					}
				}
				int both_same = 1;
				for(int k=1;k<=n;k++) {
					if(i == k || j == k) continue;
					if(ch[k] != 2) both_same = 0;
				}
				if(both_same) {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = col[j] = 1;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i];
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j];
					}
					else {
						if(col[i] != col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k]) {
							if(col[k]) {
								if(col[k] != col[i]) {
									cout << "No" << endl;
									return 0;
								}
							}
							else col[k] = col[i];
						}
					}
				}
				else {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = 1;
						col[j] = 2;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i] + 1;
						if(col[j] == 4) col[j] = 1;
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j] + 1;
						if(col[i] == 4) col[i] = 1;
					}
					else if(col[i] && col[j]) {
						if(col[i] == col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k] && !a[j][k]) {
							if(col[k]) {
								if(col[k] != col[i]) {
									cout << "No" << endl;
									return 0;
								}
							}
							else col[k] = col[i];
						}
						else if(!a[i][k] && a[j][k]) {
							if(col[k]) {
								if(col[k] != col[j]) {
									cout << "No" << endl;
									return 0;
								}
							}
							else col[k] = col[j];
						}
					}
				}
			}
		}
	}
	string s = "";
	for(int i=1;i<=n;i++) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	if(s.size() == n) {
		cout << "Yes" << endl;
		cout << s << endl;
	}
	else {
		cout << "No" << endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int ch[MX];
int col[MX], deg[MX];

int main()
{
	int n, m, u, v;
	scanf("%d %d",&n, &m);
	FOR(i, 0, m) {
		scanf("%d %d",&u, &v);
		a[u][v] = 1;
		a[v][u] = 1;
		deg[u]++;
		deg[v]++;
	}
	if(m == 0) {
		if(n == 1) {
			cout << "Yes" << endl;
			cout << "a" << endl;
		}
		else if(n == 2) {
			cout << "Yes" << endl;
			cout << "ac" << endl;
		}
		else {
			cout << "No" << endl;
		}
		return 0;
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=n;j++) {
			if(a[i][j]) {
				set < int > s;
				for(int k=1;k<=n;k++) ch[k] = 0;
				for(int k=1;k<=n;k++) {
					if(a[i][k]) {
						ch[k]++;
					}
					if(a[j][k]) {
						ch[k]++;
					}
				}
				int both_same = 1;
				for(int k=1;k<=n;k++) {
					if(i == k || j == k) continue;
					if(ch[k] == 1) both_same = 0;
				}
				if(both_same) {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = col[j] = 1;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i];
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j];
					}
					else {
						if(col[i] != col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
					}
				}
				else {
					if(col[i] == 0 && col[j] == 0) {
						col[i] = 1;
						col[j] = 2;
					}
					else if(col[i] && col[j] == 0) {
						col[j] = col[i] + 1;
						if(col[j] == 4) col[j] = 1;
					}
					else if(col[i] == 0 && col[j]) {
						col[i] = col[j] + 1;
						if(col[i] == 4) col[i] = 1;
					}
					else if(col[i] && col[j]) {
						if(col[i] == col[j]) {
							cout << "No" << endl;
							return 0;
						}
					}
					for(int k=1;k<=n;k++) {
						if(a[i][k] && !a[j][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
						else if(!a[i][k] && a[j][k]) {
							if(deg[i] == deg[k]) col[k] = col[i];
						}
					}
				}
			}
		}
	}
	string s = "";
	for(int i=1;i<=n;i++) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	if(s.size() == n) {
		for(int i=0;i<n;i++) {
			for(int j=i+1;j<n;j++) {
				if(s[i] == s[j]) {
					if(!a[i+1][j+1]) {
						cout << "No" << endl;
						return 0;
					}
				}
				else {
					if(s[i] == s[j] + 1 || s[i] + 1 == s[j]) {
						if(!a[i][j]) {
							cout << "No" << endl;
							return 0;
						}
					}
				}
			}
		}
		cout << "Yes" << endl;
		cout << s << endl;
	}
	else {
		cout << "No" << endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int col[MX];

int main()
{
	int n, m;
	cin >> n >> m;
	FOR(i, 0, m) {
		int u, v;
		cin >> u >> v;
		a[u][v] = 1;
		a[v][u] = 1;
	}
	FOR(i, 1, n+1) {
		bool isB = true;
		FOR(j, 1, n+1) {
			if(i == j) continue;
			if(!a[i][j]) isB = false;
		}
		if(isB) col[i] = 2;
	}
	FOR(i, 1, n+1) {
		//Assign A
		if(!col[i]) {
			col[i] = 1;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 1;
				}
			}
			break;
		}
	}
	FOR(i, 1, n+1) {
		//Assign C
		if(!col[i]) {
			col[i] = 3;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 3;
				}
			}
		}
	}
	string s = "";
	FOR(i, 1, n+1) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	FOR(i, 0, n) {
		FOR(j, i+1, n) {
			if(abs(s[i] - s[j]) <= 1) {
				if(!a[i+1][j+1]) {
					cout << "No\n";
					return 0;
				}
			}
		}
	}
	cout << "Yes\n" << s << endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define LL long long
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define ITER(it,container) for(__typeof(container.begin()) it=container.begin();it!=container.end();it++)
const int MX = 1e3 + 5;
const LL MOD = 1e9 + 7;
const int INF = INT_MAX;

int a[MX][MX];
int col[MX];

int main()
{
	int n, m;
	cin >> n >> m;
	FOR(i, 0, m) {
		int u, v;
		cin >> u >> v;
		a[u][v] = 1;
		a[v][u] = 1;
	}
	FOR(i, 1, n+1) {
		bool isB = true;
		FOR(j, 1, n+1) {
			if(i == j) continue;
			if(!a[i][j]) isB = false;
		}
		col[i] = 2;
	}
	FOR(i, 1, n+1) {
		//Assign A
		if(!col[i]) {
			col[i] = 1;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 1;
				}
			}
			break;
		}
	}
	FOR(i, 1, n+1) {
		//Assign C
		if(!col[i]) {
			col[i] = 3;
			FOR(j, 1, n+1) {
				if(i == j) continue;
				if(a[i][j]) {
					if(!col[j]) col[j] = 3;
				}
			}
		}
	}
	string s = "";
	FOR(i, 1, n+1) {
		if(col[i] == 1) s += "a";
		else if(col[i] == 2) s += "b";
		else if(col[i] == 3) s += "c";
	}
	FOR(i, 0, n) {
		FOR(j, i+1, n) {
			if(abs(s[i] - s[j]) <= 1) {
				if(!a[i+1][j+1]) {
					cout << "No\n";
					return 0;
				}
			}
		}
	}
	cout << "Yes\n" << s << endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxm 260000
ll color[maxm],in[maxm];
vector<ll> adj[maxm];
bool visited[maxm],visited2[maxm],done[600][600];
bool ok=true;
ll n,m;
void dfs(ll i,ll num)
{
    if(!ok)
        return;
    if(color[i]!=-1)
    {
        if(color[i]!=num)
        {
            ok=false;
        }
        return;
    }
    color[i]=num;
    for(ll j=1;j<=n;j++)
    {
        if(j!=i&&!done[j][i])
        {
            dfs(j,num^1);   //xor wid one gives complement,here assigning a and c that is nodes not attached to a are given c
        }
    }
}
int main()
{
    ll  i,x,y,cnt;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
        in[x]++;
        in[y]++;
        done[x][y]=done[y][x]=1;
    }
    memset(color,-1,sizeof(color));
    cnt=0;
    for(i=1;i<=n;i++)
    {
        if(in[i]!=n-1&&color[i]==-1)
        {
            dfs(i,0);
            if(!ok)
            {
                cout<<"No";
                return 0;
            }
        }
    }
    string s;
    for(i=1;i<=n;i++)
    {
        if(color[i]==0)
        {
            s+='a';
        }
        else if(color[i]==1)
        {
            s+='c';
        }
        else
        {
            s+='b';
        }
    }
    for(i=0;i<n;i++)
    {
        for(ll j=i+1;j<n;j++)
        {
            if(abs(s[i]-s[j])<=1)
            {
                if(!done[i+1][j+1])
                {
                    cout<<"No";
                    return 0;
                }
            }
            else
            {
                if(done[i+1][j+1])
                {
                    cout<<"No";
                    return 0;
                }
            }
        }
    }
    cout<<"Yes\n";
    cout<<s;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxm 260000
ll color[maxm],in[maxm];
vector<ll> adj[maxm];
bool visited[maxm];
ll num;
void dfs(ll i)
{
    ll u;
    color[i]=num;
    visited[i]=true;
    for(ll j=0;j<adj[i].size();j++)
    {
        u=adj[i][j];
        if((!visited[u])&&(color[u]==-1))
        {
            dfs(adj[i][j]);
        }
    }
}
int main()
{
    ll n,m,i,x,y,cnt;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
        in[x]++;
        in[y]++;
    }
    memset(color,-1,sizeof(color));
    for(i=1;i<=n;i++)
    {
        if(in[i]==n-1)
        {
            color[i]=1;         //assigning character 'b'
        }
    }
    cnt=0;
    for(i=1;i<=n;i++)
    {
        if(color[i]==-1)
        {
            if(cnt%2==0)
            {
                num=0;
                dfs(i);
            }
            else
            {
                num=2;
                dfs(i);
            }
            cnt++;
        }
    }
    if(cnt>2)
    {
        cout<<"No";
    }
    else
    {
        cout<<"Yes\n";
        for(i=1;i<=n;i++)
        {
            cout<<(char)('a'+color[i]);
        }
    }
    return 0;
}


//Concept : Graph Theory
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxm 260000
ll color[maxm],in[maxm];
vector<ll> adj[maxm];
bool visited[maxm],visited2[maxm],done[600][600];
bool ok=true;   //to check if there are some disconnected same type of nodes
ll n,m;
/*
How to think ?

    Think that the node with name = b can be assigned only to one with indegree n-1
    After that,think that rest of the nodes have to be a or c.
    So we iterate over all left over nodes in all connected components
    as there can be more than one connected components in the graph.
    And then we set a random node to be a.
    Then for all other nodes to which it is not connected are set to c.
    This is done till all nodes get colored.
    Now if there will be some violation,
    It comes in between and we can notice it since
    i is of suppose a color then its neighbour has to be of c color and if a marked neighbour comes to be of same
    color ie the toggle of the one we passed(this is the previous color)
    then we have to print No.
    Last we create the string and find if the graphb matches the string.
    This is done in O(n^2)
    And its ok.
*/
void dfs(ll i,ll num)
{
    if(!ok)
        return;
    if(color[i]!=-1)
    {
        if(color[i]!=num)
        {
            ok=false;
        }
        return;
    }
    color[i]=num;
    for(ll j=1;j<=n;j++)
    {
        if(j!=i&&!done[j][i])
        {
            dfs(j,num^1);   //xor wid one gives complement,here assigning a and c that is nodes not attached to a are given c
        }
    }
}
int main()
{
    ll  i,x,y,cnt;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
        in[x]++;
        in[y]++;
        done[x][y]=done[y][x]=1;
    }
    memset(color,-1,sizeof(color));
    cnt=0;
    for(i=1;i<=n;i++)       //assigning a and c
    {
        if(in[i]!=n-1&&color[i]==-1)
        {
            dfs(i,0);
            if(!ok)
            {
                cout<<"No";
                return 0;
            }
        }
    }
    string s;
    for(i=1;i<=n;i++)
    {
        if(color[i]==0)
        {
            s+='a';
        }
        else if(color[i]==1)
        {
            s+='c';
        }
        else
        {
            s+='b';
        }
    }
    for(i=0;i<n;i++)        //checking.Create the string then check.
    {
        for(ll j=i+1;j<n;j++)
        {
            if(abs(s[i]-s[j])<=1)
            {
                if(!done[i+1][j+1])
                {
                    cout<<"No";
                    return 0;
                }
            }
            else
            {
                if(done[i+1][j+1])
                {
                    cout<<"No";
                    return 0;
                }
            }
        }
    }
    cout<<"Yes\n";
    cout<<s;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll> adj[600],adj2[600];
ll done[600][600];
bool visited[600];
bool ans;
ll color[600];
void dfs(ll i,int prev)
{
    visited[i]=true;
    if(prev==0)
    {
        color[i]=2;
    }
    else
    {
        color[i]=0;
    }
    for(ll j=0;j<adj2[i].size();j++)
    {
        if(!visited[adj2[i][j]])
        {
            dfs(adj2[i][j],color[i]);
        }
        else
        {
            if(color[i]==color[adj2[i][j]])
            {
                ans=false;
            }
        }
    }
}
int main()
{
    ll n,m,i,x,y,j,u,v;
    map<ll,ll> m1;
    cin>>n>>m;
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
        done[x][y]=1;
        done[y][x]=1;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(i==j)
            {
                continue;
            }
            if((done[i][j]==0&&done[j][i]==0))
            {
                adj2[i].push_back(j);
                adj2[j].push_back(i);
            }
        }
    }
    memset(color,-1,sizeof(color));
    for(i=1;i<=n;i++)
    {
        if(!visited[i])
        {
            ans=true;
            dfs(i,0);
            if(ans==false)
            {
                cout<<"No";
                return 0;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        if(color[i]==-1)
        {
            color[i]=1;
        }
    }
    char ch;
    cout<<"Yes\n";
    for(i=1;i<=n;i++)
    {
        ch=(char)('a'+color[i]);
        cout<<ch;
    }
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxm 260000
ll color[maxm],in[maxm];
vector<ll> adj[maxm];
bool visited[maxm],visited2[maxm];
ll num;
void dfs(ll i)
{
    ll u;
    color[i]=num;
    visited[i]=true;
    for(ll j=0;j<adj[i].size();j++)
    {
        u=adj[i][j];
        if((!visited[u])&&(color[u]==-1))
        {
            dfs(adj[i][j]);
        }
    }
}
bool bfs(ll i,int val)
{
    queue<ll> bfsq;
    bfsq.push(i);
    visited2[i]=true;
    while(!bfsq.empty())
    {
        ll num=bfsq.front();
        bfsq.pop();
        //cout<<"\n"<<color[num]<<" "<<val<<"\n";
        if(color[num]==val)
        {
            return false;
        }
        for(ll j=0;j<adj[i].size();j++)
        {
            if(!visited2[adj[i][j]])
            {
                bfsq.push(adj[i][j]);
                visited2[adj[i][j]]=true;
            }
        }
    }
    return true;
}
int main()
{
    ll n,m,i,x,y,cnt;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
        adj[y].push_back(x);
        in[x]++;
        in[y]++;
    }
    memset(color,-1,sizeof(color));
    for(i=1;i<=n;i++)
    {
        if(in[i]==n-1)
        {
            color[i]=1;         //assigning character 'b'
        }
    }
    cnt=0;
    for(i=1;i<=n;i++)
    {
        if(color[i]==-1)
        {
            if(cnt%2==0)
            {
                num=0;
                dfs(i);
            }
            else
            {
                num=2;
                dfs(i);
            }
            cnt++;
        }
    }
    if(cnt>2)
    {
        cout<<"No";
        return 0;
    }
    else
    {
        bool ans1,ans2,ex;
        ans1=false;
        ans2=false;
        ex=false;
        for(i=1;i<=n;i++)
        {
            if(color[i]==0)
            {
                ans1=bfs(i,2);
                ex=true;
            }
        }
        memset(visited2,false,sizeof(visited2));
        for(i=1;i<=n;i++)
        {
            if(!visited2[i]&&color[i]==2)
            {
                ans2=bfs(i,0);
                ex=true;
            }
        }
        //cout<<ans1<<" "<<ans2<<"\n";
        if(ex)
        {
            if(ans1==false||ans2==false)
            {
                cout<<"No";
                return 0;
            }
        }
        cout<<"Yes\n";
        for(i=1;i<=n;i++)
        {
            cout<<(char)('a'+color[i]);
        }
    }
    return 0;
}


#include <iostream>
#include <queue>

using namespace std;

int main(){
    int n, m, i, j, broj1, broj2, brojac;
    int naznaci[501];
    int kolku[501];
    char bukva[501];
    bool ok[501][501];
    for (i=0; i<501; i++){
        naznaci[i] = 0;
        bukva[i]='?';
        for (j=0; j<501; j++){
            ok[i][j] = false;
        }
    }
    cin>>n>>m;
    for (i=0; i<m; i++){
        cin>>broj1>>broj2;
        ok[broj1][broj2] = true;
        ok[broj2][broj1] = true;
        naznaci[broj1]++;
        naznaci[broj2]++;
    }
    for (i=1; i<=n; i++){
        if (naznaci[i]==n-1)
            bukva[i] = 'b';
    }
    queue <int> bfs;
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]!='b'){
            bukva[i] = 'a';
            kolku[i]++;
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b')){
                    bfs.push(j);
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b') && (kolku[j]==brojac)){
                    bukva[j] = 'a';
                }
            }
            break;
        }
    }
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?'){
            bukva[i] = 'c';
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?')){
                    bfs.push(j);
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?') && (kolku[j]==brojac)){
                    bukva[j] = 'c';
                }
            }
            break;
        }
    }
    bool kraj = false;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?')
            kraj = true;
    }
    if (kraj==true)
        cout<<"No";
    else{
        cout<<"Yes"<<"\n";
        for (i=1; i<=n; i++)
            cout<<bukva[i];
    }
    return 0;
}


#include <iostream>
#include <queue>

using namespace std;

int main(){
    int n, m, i, j, broj1, broj2, brojac;
    int naznaci[501];
    int kolku[501];
    char bukva[501];
    bool ok[501][501];
    for (i=0; i<501; i++){
        naznaci[i] = 0;
        bukva[i]='?';
        for (j=0; j<501; j++){
            ok[i][j] = false;
        }
    }
    cin>>n>>m;
    for (i=0; i<m; i++){
        cin>>broj1>>broj2;
        ok[broj1][broj2] = true;
        ok[broj2][broj1] = true;
        naznaci[broj1]++;
        naznaci[broj2]++;
    }
    for (i=1; i<=n; i++){
        if (naznaci[i]==n-1)
            bukva[i] = 'b';
    }
    queue <int> bfs;
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]!='b'){
            bukva[i] = 'a';
            kolku[i]++;
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b')){
                    kolku[j]++;
                    bfs.push(j);
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((kolku[j]<brojac) && (kolku[j]>0) && (bukva[j]!='b')){
                    cout<<"No";
                    return 0;
                }
                if ((ok[i][j]==true) && (bukva[j]!='b') && (kolku[j]==brojac)){
                    bukva[j] = 'a';
                }
            }
            break;
        }
    }
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?'){
            bukva[i] = 'c';
            kolku[i]++;
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?')){
                    bfs.push(j);
                    kolku[j]++;
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((kolku[j]>0) && (kolku[j]<brojac) && (bukva[j]!='b')){
                    cout<<"No";
                    return 0;
                }
                if ((ok[i][j]==true) && (bukva[j]=='?') && (kolku[j]==brojac)){
                    bukva[j] = 'c';
                }
            }
            break;
        }
    }
    bool kraj = false;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?')
            kraj = true;
    }
    if (kraj==true)
        cout<<"No";
    else{
        cout<<"Yes"<<"\n";
        for (i=1; i<=n; i++)
            cout<<bukva[i];
    }
    return 0;
}


#include <iostream>
#include <queue>

using namespace std;

int main(){
    int n, m, i, j, broj1, broj2, brojac;
    int naznaci[501];
    int kolku[501];
    char bukva[501];
    bool ok[501][501];
    for (i=0; i<501; i++){
        naznaci[i] = 0;
        bukva[i]='?';
        for (j=0; j<501; j++){
            ok[i][j] = false;
        }
    }
    cin>>n>>m;
    for (i=0; i<m; i++){
        cin>>broj1>>broj2;
        ok[broj1][broj2] = true;
        ok[broj2][broj1] = true;
        naznaci[broj1]++;
        naznaci[broj2]++;
    }
    for (i=1; i<=n; i++){
        if (naznaci[i]==n-1)
            bukva[i] = 'b';
    }
    queue <int> bfs;
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]!='b'){
            bukva[i] = 'a';
            kolku[i]++;
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b')){
                    kolku[j]++;
                    bfs.push(j);
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b') && (kolku[j]==brojac)){
                    bukva[j] = 'a';
                }
            }
            break;
        }
    }
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?'){
            bukva[i] = 'c';
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?')){
                    bfs.push(j);
                    kolku[j]++;
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?') && (kolku[j]==brojac)){
                    bukva[j] = 'c';
                }
            }
            break;
        }
    }
    bool kraj = false;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?')
            kraj = true;
    }
    if (kraj==true)
        cout<<"No";
    else{
        cout<<"Yes"<<"\n";
        for (i=1; i<=n; i++)
            cout<<bukva[i];
    }
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    int n, m, i, j, broj1, broj2;
    int naznaci[501];
    char bukva[501];
    bool ok[501][501];
    for (i=0; i<501; i++){
        naznaci[i] = 0;
        bukva[i]='?';
        for (j=0; j<501; j++){
            ok[i][j] = false;
        }
    }
    cin>>n>>m;
    for (i=0; i<m; i++){
        cin>>broj1>>broj2;
        ok[broj1][broj2] = true;
        ok[broj2][broj1] = true;
        naznaci[broj1]++;
        naznaci[broj2]++;
    }
    for (i=1; i<=n; i++){
        if (naznaci[i]==n-1)
            bukva[i] = 'b';
    }
    for (i=1; i<=n; i++){
        if (bukva[i]!='b'){
            bukva[i] = 'a';
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b'))
                    bukva[j]='a';
            }
            break;
        }
    }
    for (i=1; i<=n; i++){
        if (bukva[i]=='?'){
            bukva[i] = 'c';
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?'))
                    bukva[j] = 'c';
            }
            break;
        }
    }
    bool kraj = false;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?')
            kraj = true;
    }
    if (kraj==true)
        cout<<"No";
    else{
        cout<<"Yes"<<"\n";
        for (i=1; i<=n; i++)
            cout<<bukva[i];
    }
    return 0;
}


#include <iostream>
#include <queue>

using namespace std;

int main(){
    int n, m, i, j, broj1, broj2, brojac;
    int naznaci[501];
    int kolku[501];
    char bukva[501];
    bool ok[501][501];
    for (i=0; i<501; i++){
        naznaci[i] = 0;
        bukva[i]='?';
        for (j=0; j<501; j++){
            ok[i][j] = false;
        }
    }
    cin>>n>>m;
    for (i=0; i<m; i++){
        cin>>broj1>>broj2;
        ok[broj1][broj2] = true;
        ok[broj2][broj1] = true;
        naznaci[broj1]++;
        naznaci[broj2]++;
    }
    for (i=1; i<=n; i++){
        if (naznaci[i]==n-1)
            bukva[i] = 'b';
    }
    queue <int> bfs;
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]!='b'){
            bukva[i] = 'a';
            kolku[i]++;
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]!='b')){
                    kolku[j]++;
                    bfs.push(j);
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((kolku[j]<brojac) && (kolku[j]>0)){
                    cout<<"No";
                    return 0;
                }
                if ((ok[i][j]==true) && (bukva[j]!='b') && (kolku[j]==brojac)){
                    bukva[j] = 'a';
                }
            }
            break;
        }
    }
    for (i=0; i<=500; i++){
        kolku[i] = 0;
    }
    brojac = 1;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?'){
            bukva[i] = 'c';
            for (j=0; j<=n; j++){
                if ((ok[i][j]==true) && (bukva[j]=='?')){
                    bfs.push(j);
                    kolku[j]++;
                    brojac++;
                }
            }
            while (!bfs.empty()){
                int broj = bfs.front();
                bfs.pop();
                kolku[broj]++;
                for (j=0; j<=n; j++){
                    if ((ok[broj][j]==true) && (bukva[j]!='b')){
                        kolku[j] ++;
                    }
                }
            }
            for (j=0; j<=n; j++){
                if ((kolku[j]>0) && (kolku[j]<brojac)){
                    cout<<"No";
                    return 0;
                }
                if ((ok[i][j]==true) && (bukva[j]=='?') && (kolku[j]==brojac)){
                    bukva[j] = 'c';
                }
            }
            break;
        }
    }
    bool kraj = false;
    for (i=1; i<=n; i++){
        if (bukva[i]=='?')
            kraj = true;
    }
    if (kraj==true)
        cout<<"No";
    else{
        cout<<"Yes"<<"\n";
        for (i=1; i<=n; i++)
            cout<<bukva[i];
    }
    return 0;
}