#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int,int> ii;
typedef unsigned long long llu;

#define X  first
#define Y  second
#define pb push_back
#define OK puts("OK")
#define EL printf("\n")
#define FOR(x,l,r) for (auto x=l;x<=r;x++)
#define FOD(x,l,r) for (auto x=l;x>=r;x--)

const int N = 505;
int n, m, a[N][N], g[N];
vector<int> e[N];

int main()
{
    //freopen("INP.INP","r",stdin);
    //freopen("OUT.OUT","w",stdout);

    scanf("%d%d", &n,&m);
    FOR(i,1,m) {
        int u, v; scanf("%d%d", &u,&v);
        a[u][v] = a[v][u] = 1;
        e[u].pb(v); e[v].pb(u);
    }

    FOR(i,1,n) if (e[i].size() == n-1) g[i] = 2;

    FOR(i,1,n) {
        if (g[i] == 0) {
            g[i] = 1;
            FOR(j,1,n)
                if (i != j) g[j] = a[i][j] ? 1 : 3;
        }
    }

    FOR(i,1,n) FOR(j,i+1,n) {
        if (a[i][j] == 0) {
            if (g[i]*g[j] != 3) return puts("No");
        }
        else {
            if (g[i]*g[j] == 3) return puts("No");
        }
    }

    puts("Yes");
    FOR(i,1,n)
        if (g[i] == 1) printf("a");
        else if (g[i] == 2) printf("b");
        else printf("c");
    EL;

    return 0;
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		for(int j=1;j<=n;j++)
		{
			if(adj[i][j])
			{
				if(str[j]=='a' && str[i]=='c')
				return false;
				else if(str[j]=='c' && str[i]=='a')
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[i]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			if(k>1)
			break;

			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

	if(k>1)
	cout<<"No";
	else if(k==1)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';

				for(int j=1;j<=n;j++)
				{
					adj[i][j]=adj[j][i]=0;
				}
			}
		}

		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		cout<<str+1<<endl;

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		//cout<<s<<endl;

		for(int j=1;j<=n;j++)
		{
			if(s!=j && adj[s][j])
			{
			//	cout<<"I "<<s<<" j "<<j<<endl;
				if(str[j]==str[s])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[s]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
				//	cout<<"put "<<j<<" "<<str[j]<<endl;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			if(k>1)
			break;

			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

	//cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		fr(i,1,n+1)
		visited[i]=false;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		cout<<"Yes\n"<<str+1<<endl;

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

struct pack{
	int a;
	int b;
	int c;

	bool operator()(pack y)
	{
		return a<y.a;
	}
};

int adj[5005][5005];
char str[5005];
bool visited[5005];
int n;

void dfs(int i,int k)
{
	str[i]='a'+k;
	visited[i]=true;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	//cout<<"Here\n";

	f(i,m)
	{
		cin>>u>>v;

		//cout<<u<<" "<<v<<endl;

		adj[u][v]=1;
		adj[v][u]=1;

		//cout<<"eseche\n";
	}

//	cout<<"Here\n";

	vector<pack >st;

	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(!adj[i][j])
			st.push_back((pack){i,j,-1});
		}
	}

	//cout<<"Here\n";

	vector<pack> nset;
	vector<pack >::iterator iter;
	for(int i=1;i<=n;i++)
	{
		iter=st.begin();

		while(iter!=st.end())
		{
			u=iter->a;
			v=iter->b;

			if(i!=u && i!=v)
			{
				if(!adj[i][u] && !adj[i][v])
				nset.push_back((pack){u,v,i});
			}

			iter++;
		}

	}

//	cout<<"Here\n";
	iter=nset.begin();

	ans=true;
	while(ans && iter!=nset.end())
	{
		u=iter->a;
		v=iter->b;
		r=iter->c;

		for(int i=1;i<=n;i++)
		{
			if(adj[i][u] && adj[i][v] && adj[i][r])
			{

			 ans=false;
			 break;
			 }
		}
		iter++;
	}

	if(ans)
	{
		//cout<<"Elo!\n";
 	 	   int k=0;

		for(int i=1;i<=n;i++)
		{
			if(!visited[i])
			{
				if(k>2)
				{
					ans=false;
					break;
				}
				else
				dfs(i,k);
			}

			k+=2;

			if(!ans)
			break;
		}

		if(ans)
		{
			cout<<"Yes\n";
			for(int i=1;i<=n;i++)
			cout<<str[i];
			cout<<endl;
		}
		else
		cout<<"No\n";

	}
	else
	{
		cout<<"No\n";
	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		//cout<<s<<endl;

		for(int j=1;j<=n;j++)
		{
			if(s!=j && adj[s][j])
			{
			//	cout<<"I "<<s<<" j "<<j<<endl;
				if(str[j]==str[s])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[s]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
					//cout<<"put "<<j<<" "<<str[j]<<endl;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			sizek=0;
			if(k<=1)
			{
				dfs(i,k);
				size[k]=sizek;
			}

			k++;
		}
	}

//	cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No\n";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
				//cout<<"I "<<i<<endl;
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		fr(i,1,n+1)
		visited[i]=false;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=n;j++)
				{
					if(!adj[i][j])
					{
						if(str[i]==str[j]||abs(str[i]-str[j])==1)
						continue;
						else
						{
							cout<<"No\n";
							fl=false;
							break;
						}
					}
				}

				if(!fl)
				break;
			}

			if(fl)
			{
				cout<<"Yes\n"<<str+1<<endl;
			}

		}

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		for(int j=1;j<=n;j++)
		{
			if(i!=j && adj[i][j])
			{
			//	cout<<"I "<<i<<" j "<<j<<endl;
				if(str[j]==str[i])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[i]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			if(k>1)
			break;

			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

	//cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		cout<<str+1<<endl;

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		//cout<<s<<endl;

		for(int j=1;j<=n;j++)
		{
			if(s!=j && adj[s][j])
			{
				cout<<"I "<<s<<" j "<<j<<endl;
				if(str[j]==str[s])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[s]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
					//cout<<"put "<<j<<" "<<str[j]<<endl;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

//	cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No\n";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
				//cout<<"I "<<i<<endl;
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		fr(i,1,n+1)
		visited[i]=false;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=n;j++)
				{
					if(!adj[i][j])
					{
						if(str[i]==str[j]||abs(str[i]-str[j])==1)
						continue;
						else
						{
							cout<<"No\n";
							fl=false;
							break;
						}
					}
				}

				if(!fl)
				break;
			}

			if(fl)
			{
				cout<<"Yes\n"<<str+1<<endl;
			}

		}

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		for(int j=1;j<=n;j++)
		{
			if(i!=j && adj[i][j])
			{
			//	cout<<"I "<<i<<" j "<<j<<endl;
				if(str[j]==str[i])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[i]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			if(k>1)
			break;

			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

	//cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		cout<<"Yes\n"<<str+1<<endl;

	}
}


#include<bits/stdc++.h>
#define f(i,n) for(int i=0;i<n;i++)
#define fr(i,r,n) for(int i=r;i<n;i++)
#define ll long long
#define  pb push_back

using namespace std;

int adj[5005][5005];
int cnt[5005];
char str[5005];
int part[5005];
bool visited[5005];
int n;
int sizek=0;

void dfs(int i,int k)
{
	visited[i]=true;
	sizek++;

	part[i]=k;

	for(int j=1;j<=n;j++)
	{
		if(adj[i][j] && !visited[j])
		dfs(j,k);
	}
}

bool mark(int i)
{
	queue<int> q;

	q.push(i);
	visited[i]=true;

	while(!q.empty())
	{
		int s=q.front();
		q.pop();

		//cout<<s<<endl;

		for(int j=1;j<=n;j++)
		{
			if(s!=j && adj[s][j])
			{
			//	cout<<"I "<<s<<" j "<<j<<endl;
				if(str[j]==str[s])
				return false;
				else if(str[j]=='-')
				{
					str[j]=(str[s]=='a')?'c':'a';
				}

				if(!visited[j])
				{
					visited[j]=true;
				//	cout<<"put "<<j<<" "<<str[j]<<endl;
					q.push(j);
				}
			}
		}
	}

	return true;
}
int main()
{
	ios_base::sync_with_stdio(false);

	int m,u,v,r;
	bool ans;

	cin>>n>>m;

	f(i,m)
	{
		cin>>u>>v;

		adj[u][v]=1;
		adj[v][u]=1;

		cnt[u]++;
		cnt[v]++;
	}

	int k=0;
	int size[2]={0,0};

	for(int i=1;i<=n;i++)
	{
		str[i]='-';

		if(!visited[i])
		{
			if(k>1)
			break;

			sizek=0;
			dfs(i,k);
			size[k]=sizek;

			k++;
		}
	}

	//cout<<"k "<<k<<endl;
	if(k>2)
	cout<<"No";
	else if(k==2)
	{
		//both should be completely connected
		bool fl=true;

		for(int i=1;i<=n;i++)
		{
			if(cnt[i]!=size[part[i]]-1)
			{
				cout<<"No\n";
				fl=false;
				break;
			}
		}

		if(fl)
		{
			cout<<"Yes\n";

			for(int i=1;i<=n;i++)
			{
				if(part[i])
				cout<<"a";
				else
				cout<<"c";
			}
			cout<<endl;
		}

	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==n-1)
			{
				str[i]='b';
				//cout<<"I "<<i<<endl;
			}

			for(int j=1;j<=n;j++)
			{
				adj[i][j]=!adj[i][j];
			}
		}

		bool fl=true;

		fr(i,1,n+1)
		visited[i]=false;

		for(int i=1;i<=n;i++)
		{
			if(str[i]=='-')
			{
				str[i]='a';

				//cout<<"I "<<i<<endl;
				if(!mark(i))
				{
					cout<<"No\n";
					fl=false;
					break;
				}
			}
		}

		if(fl)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=n;j++)
				{
					if(!adj[i][j])
					{
						if(str[i]==str[j]||abs(str[i]-str[j])==1)
						continue;
						else
						{
							cout<<"No\n";
							fl=false;
							break;
						}
					}
				}

				if(!fl)
				break;
			}

			if(fl)
			{
				cout<<"Yes\n"<<str+1<<endl;
			}

		}

	}
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int edd[505][505];
int num[505];
char ans[505];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int i,j;
    for(i=0;i<m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        a--;b--;
        edd[a][b]=1;
        edd[b][a]=1;
        num[a]++;
        num[b]++;
    }
    for(i=0;i<n;i++)
    {
        if(num[i]==n-1)
        {
            ans[i]='b';
        }
    }
    for(i=0;i<n;i++)
    {
        if(!ans[i])
        {
            ans[i]='a';
            for(j=0;j<n;j++)
            {
                if(!ans[j])
                {
                    if(edd[i][j])
                    {
                        ans[j]='a';
                    }
                    else
                    {
                        ans[j]='c';
                    }
                }
            }
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==j) continue;
            if((abs(ans[i]-ans[j])==2&&edd[i][j])||(abs(ans[i]-ans[j])<2&&!edd[i][j]))
               {
                   printf("No\n");
                   return 0;
               }
        }
    }
    cout<<"Yes\n"<<ans<<endl;
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
using namespace std;
int q[505];
int e[505][3];
int n,m;
int init()
{
    int f;
    for(int i=0;i<m;i++)
    {
        f=0;
        if(q[e[i][0]]==q[e[i][1]]) f=1;
        if(q[e[i][0]]-q[e[i][1]]==1) f=1;
        if(q[e[i][0]]-q[e[i][1]]==-1) f=1;
        if(f==0) return 0;
    }
    if(f==1) return 1;
}

int main()
{

    scanf("%d%d",&n,&m);
    int fh=3*n;
    int a,b;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        e[i][0]=a;
        e[i][1]=b;
    }
    int d;
    int am,bm,cm;
    for(int i=0;i<fh;i++)
    {
        memset(q,0,sizeof(q));
        am=0;
        bm=0;
        cm=0;
        int j=0;
        while(i)
        {
            q[j]=i%3;
            i=i/3;
            if(q[j]==1) bm++;
            if(q[j]==2) cm++;
            j++;
        }
        am=n-bm-cm;
        int ff=am*(am-1)/2+am*bm+bm*(bm-1)/2+bm*cm+cm*(cm-1)/2;
        if(ff==m)
        {
            d=init();
        }
        else {d=0;break;}
        if(d) break;
    }
    if(d)
    {
        printf("Yes\n");
        for(int i=0;i<n;i++)
        {
            if(q[i]==0) printf("a");
            if(q[i]==1) printf("b");
            if(q[i]==2) printf("c");
        }
    }
    else printf("No\n");
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int cnt[555];
bool edge[555][555];
char ans[555];

int main() {
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        --x, --y;
        edge[x][y] = edge[y][x] = 1;
        cnt[x]++;
        cnt[y]++;
    }
    for(int i = 0; i < n; ++i) {
        if(cnt[i] == n - 1)
            ans[i] = 'b';
    }
    for(int i = 0; i < n; ++i) {
        if(!ans[i]) {
            ans[i] = 'a';
            for(int j = 0; j < n; ++j) {
                if(!ans[j]) {
                    if(edge[i][j])
                        ans[j] = 'a';
                    else
                        ans[j] = 'c';
                }
            }
        }
    }
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < n; ++j) {
            if(i == j)
                continue;
            if((abs(ans[i] - ans[j]) == 2 && edge[i][j]) || (abs(ans[i] - ans[j]) < 2
                    && !edge[i][j])) {
                cout << "No";
                return 0;
            }
        }
    }
    cout << "Yes\n" << ans << endl;
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
using namespace std;
int q[505];
int e[505][3];
int n,m;
int init()
{
    int f;
    for(int i=0;i<m;i++)
    {
        f=0;
        if(q[e[i][0]]==q[e[i][1]]) f=1;
        if(q[e[i][0]]-q[e[i][1]]==1) f=1;
        if(q[e[i][0]]-q[e[i][1]]==-1) f=1;
        if(f==0) return 0;
    }
    if(f==1) return 1;
}

int main()
{

    scanf("%d%d",&n,&m);
    int fh=3*n;
    int a,b;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        e[i][0]=a;
        e[i][1]=b;
    }
    int d;
    int am,bm,cm;
    for(int i=0;i<fh;i++)
    {
        memset(q,0,sizeof(q));
        am=0;
        bm=0;
        cm=0;
        int j=0;
        while(i)
        {
            q[j]=i%3;
            i=i/3;
            if(q[i]==1) bm++;
            if(q[i]==2) cm++;
        }
        am=n-bm-cm;
        int ff=am*(am-1)/2+am*bm+bm*(bm-1)/2+bm*cm+cm*(cm-1)/2;
        if(ff==m)
        {
            d=init();
        }
        else {d=0;break;}
        if(d) break;
    }
    if(d)
    {
        printf("Yes\n");
        for(int i=0;i<n;i++)
        {
            if(q[i]==0) printf("a");
            if(q[i]==1) printf("b");
            if(q[i]==2) printf("c");
        }
    }
    else printf("No\n");
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int edd[505][505];
int num[505];
char ans[505];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int i,j;
    for(i=0;i<m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        a--;b--;
        edd[a][b]=1;
        edd[b][a]=1;
        num[a]++;
        num[b]++;
    }
    for(i=0;i<n;i++)
    {
        if(num[i]==n-1)
        {
            ans[i]='b';
        }
    }
    for(i=0;i<n;i++)
    {
        if(!ans[i])
        {
            ans[i]='b';
            for(j=0;j<n;j++)
            {
                if(!ans[j])
                {
                    if(edd[i][j])
                    {
                        ans[j]='a';
                    }
                    else
                    {
                        ans[j]='c';
                    }
                }
            }
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==j) continue;
            if((abs(ans[i]-ans[j])==2&&edd[i][j])||(abs(ans[i]-ans[j])<2&&!edd[i][j]))
               {
                   printf("No\n");
                   return 0;
               }
        }
    }
    cout<<"Yes\n"<<ans<<endl;
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int edd[505][505];
int num[505];
char ans[505];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int i,j;
    for(i=0;i<m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        a--;b--;
        edd[a][b]=1;
        edd[b][a]=1;
        num[a]++;
        num[b]++;
    }
    for(i=0;i<n;i++)
    {
        if(num[i]==n-1)
        {
            ans[i]='b';
        }
    }
    for(i=0;i<n;i++)
    {
        if(!ans[i])
        {
            ans[i]='b';
            for(j=0;j<n;j++)
            {
                if(!ans[j])
                {
                    if(edd[i][j])
                    {
                        ans[j]='c';
                    }
                }
            }
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==j) continue;
            if((abs(ans[i]-ans[j])==2&&edd[i][j])||(abs(ans[i]-ans[j])<2&&!edd[i][j]))
               {
                   printf("No\n");
                   return 0;
               }
        }
    }
    cout<<"Yes\n"<<ans<<endl;
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int q[505];
int e[505][3];
int n,m;
int init()
{
    int f;
    for(int i=0;i<m;i++)
    {
        f=0;
        if(q[e[i][0]]==q[e[i][1]]) f=1;
        if(q[e[i][0]]-q[e[i][1]]==1) f=1;
        if(q[e[i][0]]-q[e[i][1]]==-1) f=1;
        if(f==0) return 0;
    }
    if(f==1) return 1;
}

int main()
{

    scanf("%d%d",&n,&m);
    long long fh=pow(3,n);
    int a,b;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        e[i][0]=a;
        e[i][1]=b;
    }
    int d;
    int am,bm,cm;
    for(long long i=0;i<fh;i++)
    {
        memset(q,0,sizeof(q));
        am=0;
        bm=0;
        cm=0;
        int  j=0;
        while(i)
        {
            q[j]=i%3;
            i=i/3;
            if(q[j]==1) bm++;
            if(q[j]==2) cm++;
            j++;
        }
        am=n-bm-cm;
        int ff=am*(am-1)/2+am*bm+bm*(bm-1)/2+bm*cm+cm*(cm-1)/2;
        if(ff==m)
        {
            d=init();
        }
        else {d=0;break;}
        if(d) break;
    }
    if(d)
    {
        printf("Yes\n");
        for(int i=0;i<n;i++)
        {
            if(q[i]==0) printf("a");
            if(q[i]==1) printf("b");
            if(q[i]==2) printf("c");
        }
    }
    else printf("No\n");
    return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[u].size()-cnt);

	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == ((n-cnt)*(n-cnt-1))/2) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	rep(i, 501) rep(j, 501) {
		if( (i*(i-1))/2 == u && (j*(j-1))/2 == v && i + j + cnt == n) {
			cout << "Yes" << endl;
			REP(k, n) {
				if(ans[k] == 2) cout << 'b';
				else if(e[u].size()-cnt == i) cout << 'a';
				else cout << 'b';
			}
			nl;
			return 0;
		}
	}
	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX], p[MX];

void dfs(int u) {
	ans[u] = 1;
	for(auto &v: e[u]) if(ans[v] == 0) dfs(v);
}

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) {
		s.insert(e[i].size()-cnt);
		++p[e[i].size()-cnt];
	}

	dbg(s);
	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == n-1-cnt && p[u] == n-cnt) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		else {
			if((u+1)*2 != p[u]) {
				cout << "No" << endl;
				return 0;
			}
			cout << "Yes" << endl;
			REP(i, n) if(ans[i] == 0) {
				dfs(i);
				break;
			}
			REP(i, n) {
				if(ans[i] == 1) cout << 'a';
				else if(ans[i] == 2) cout << 'b';
				else cout << 'c';
			}
			nl;
			return 0;
		}
	}
	else {
		++it;
		v = *it;
	}

	if(u+v+2+cnt == n && p[u] == u+1 && p[v] == v+1) {
		puts("Yes");
		REP(i, n) {
			if(ans[i] == 2) cout << 'b';
			else if(e[i].size()-cnt == u) cout << 'a';
			else cout << 'c';
		}
		nl;
		return 0;
	}

	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[u].size()-cnt);

	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == ((n-cnt)*(n-cnt-1))/2) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	rep(i, 501) rep(j, 501) {
		if( (i*(i-1))/2 == u && (j*(j-1))/2 == v && i + j + cnt == n) {
			cout << "Yes" << endl;
			REP(k, n) {
				if(ans[k] == 2) cout << 'b';
				else if(e[k].size()-cnt == u) cout << 'a';
				else cout << 'c';
			}
			nl;
			return 0;
		}
	}
	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[i].size()-cnt);

	dbg(s);
	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == n-1-cnt) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	dbg(u, v, cnt);

	if(u+v+2+cnt == n) {
		int flag = 0;
		REP(i, n) {
			if(ans[i] == 2) cout << 'b';
			else if(e[i].size()-cnt == u && flag <= u) { cout << 'a'; ++flag; }
			else cout << 'c';
		}
		nl;
		return 0;
	}

	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[u].size()-cnt);

	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == ((n-cnt)*(n-cnt-1))/2) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	rep(i, 501) rep(j, 501) {
		if( (i*(i-1))/2 == u && (j*(j-1))/2 == v) {
			cout << "Yes" << endl;
			REP(k, n) {
				if(ans[k] == 2) cout << 'b';
				else if(e[k].size()-cnt == u) cout << 'a';
				else cout << 'c';
			}
			nl;
			return 0;
		}
	}
	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[u].size()-cnt);

	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == ((n-cnt)*(n-cnt-1))/2) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	rep(i, 501) rep(j, 501) {
		if( (i*(i-1))/2 == u && (j*(j-1))/2 == v && i + j + cnt == n) {
			cout << "Yes" << endl;
			REP(k, n) {
				if(ans[k] == 2) cout << 'b';
				else if(e[k].size()-cnt == i) cout << 'a';
				else cout << 'b';
			}
			nl;
			return 0;
		}
	}
	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[i].size()-cnt);

	dbg(s);
	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == n-1-cnt) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	dbg(u, v, cnt);

	if(u+v+2+cnt == n) {
		puts("Yes");
		int flag = 0;
		REP(i, n) {
			if(ans[i] == 2) cout << 'b';
			else if(e[i].size()-cnt == u && flag <= u) { cout << 'a'; ++flag; }
			else cout << 'c';
		}
		nl;
		return 0;
	}

	puts("No");

//	timeStamp;
	return 0;
}


/*
ID: tahsynx1
LANG: C++
TASK:
*/

#include <bits/stdc++.h>
using namespace std;

//typedefs
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef pair <ll, ll> pll;
const double PI = acos(-1);

//defines
#define MP make_pair
#define PB push_back
#define F first
#define S second
#define mem(a, b) memset(a, b, sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a)*(a))
#define inf 100000000
#define mod 1000000007
#define EPS 1e-9
//define harmonic(n) 0.57721566490153286l+log(n)
#define nl puts("")

//loop
#define rep(i, n) for(int i = 0; i < n; ++i)
#define REP(i, n) for(int i = 1; i <= n; ++i)

//input
#define si(a) scanf("%d", &a)
#define sii(a, b) scanf("%d%d", &a, &b)
#define siii(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define sl(a) scanf("%lld", &a)
#define sll(a, b) scanf("%lld%lld", &a, &b)
#define slll(a, b, c) scanf("%lld%lld%lld", &a, &b, &c)
#define sd(a) scanf("%lf", &a)
#define sc(a) scanf("%c", &a)
#define sst(a) scanf("%s", a)

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

//debug
#ifdef tahsin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) { return os << "(" << p.first << ", " << p.second << ")"; }

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) { os << "{";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "}"; }

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << *it; }
    return os << "]"; }

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) { os << "[";
	for(auto it = v.begin(); it != v.end(); ++it) { if( it != v.begin() ) os << ", "; os << it -> first << " = " << it -> second ; }
    return os << "]"; }

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () { cerr << endl; }

template <typename T>
void faltu( T a[], int n ) { for(int i = 0; i < n; ++i) cerr << a[i] << ' '; cerr << endl; }

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) { cerr << arg << ' '; faltu(rest...); }

#else
#define dbg(args...)
#endif

//Direction Array
//int fx[]={1, -1, 0, 0}; int fy[]={0, 0, 1, -1};
//int fx[]={0, 0, 1, -1, -1, 1, -1, 1}; int fy[]={-1, 1, 0, 0, 1, 1, -1, -1};

//bit manipulation
bool checkBit(int n, int i) { return (n&(1<<i)); }
int setBit(int n, int i) { return (n|(1<<i)); }
int resetBit(int n, int i) { return (n&(~(1<<i))); }
bool odd(ll n) { return (n&1); }
//end of template

#define MX 505
vi e[MX];
int ans[MX];

int main () {
#ifdef tahsin
//	freopen("out", "w", stdout);
#endif
	int n, m, u, v;

	sii(n, m);

	while(m--) {
		sii(u, v);

		e[u].PB(v);
		e[v].PB(u);
	}

	int cnt = 0;
	REP(i, n) if(e[i].size() == n-1) ans[i] = 2, ++cnt;

	set <int> s;
	REP(i, n) if(ans[i] == 0) s.insert(e[u].size()-cnt);

	if(s.size() > 2) {
		puts("No");
		return 0;
	}

	if(cnt == n && s.size() == 0) {
		puts("Yes");
		rep(i, n) cout << 'b';
		nl;
		return 0;
	}

	auto it = s.begin();
	u = *it;

	if(s.size() == 1){
	   	if(u == ((n-cnt)*(n-cnt-1))/2) {
			puts("Yes");
			REP(i, n) {
				if(ans[i] == 2) cout << 'b';
				else cout << 'a';
			}
			nl;
			return 0;
		}
		v = u;
	}
	else {
		++it;
		v = *it;
	}

	rep(i, 501) rep(j, 501) {
		if( (i*(i-1))/2 == u && (j*(j-1))/2 == v ) {
			cout << "Yes" << endl;
			REP(k, n) {
				if(ans[k] == 2) cout << 'b';
				else if(e[u].size()-cnt == i) cout << 'a';
				else cout << 'b';
			}
			nl;
			return 0;
		}
	}
	puts("No");

//	timeStamp;
	return 0;
}


#include <stdio.h>
int main(){
	int n,k,b=0;
	scanf("%d%d",&n,&k);
	int h[n];
	for(int i=0;i<n;i++){
		scanf("%d",&h[i]);
	}
	int tong=0;
	for(int i=0;i<k;i++){
		tong+=h[i];
	}
	int min=tong;
	for(int j=k;j<n;j++){
		tong-=h[j-k];
		tong+=h[j];
		if(min>tong){
			min=tong;
			b=j-k+1;
		}
	}
	printf("%d",b+1);
	return 0;
}


#include <stdio.h>

int main() {
  int N, K;
  scanf("%d %d", &N, &K);

  int heights[N];
  for (int i = 0; i < N; i++) {
    scanf("%d", &heights[i]);
  }

  int min = 0;
  int mini = 0;
  int sum = 0;
  for (int i = 0; i < K; i++) {
    sum += heights[i];
  }
  min = sum;
  // printf("%d ", min) ;
  for (int i = 1; i <= N - K; i++) {
    sum -= heights[i - 1];
    sum += heights[i + K - 1];
    // printf("%d ", sum) ;
    if (sum < min) {
      min = sum;
      mini = i;
    }
  }
  printf("%d\n", mini+1);
  return 0;
}


#include<stdio.h>
int main()
{
	long long int a, b, arr[1000000], i, c, min = 999999999, sum = 0;
	scanf("%lld %lld", &a, &b);
	arr[0] = 0;
	for (i = 1; i <= a; i++)
	{
		scanf("%lld", &arr[i]);
		sum += arr[i];
		if (i >= b)
		{
			sum -= arr[i - b];
			if (sum < min)
			{
				min = sum;
				c = i + 1 - b;
			}
		}
	}
	printf("%lld", c);
	return 0;
}


#include<limits.h>
nrs[500000],n,k,sum,min=INT_MAX,i,minj;
main() {
  scanf("%d%d",&n,&k);
  for(i=1;i<=n;i++) {
    scanf("%d", &nrs[i]);
  }
  for(i=1;i<k;i++)
    sum += nrs[i];
  for(i = k;i<=n;i++) {
    sum += nrs[i] - nrs[i-k];
    if(sum < min)
      min = sum,
      minj = i - k + 1;
  }
  printf("%d\n", minj);
}


#include <stdio.h>

int main() {
	int n, k;
	scanf("%d %d", &n, &k);
	int arr[n], tail=0, min=2000, ans=0, sum=0;
	for (int i=0;i<n;i++) {
		scanf("%d", &arr[i]);
		sum+=arr[i];
		if (i>=k-1) {
			if (sum<min) {
				min=sum;
				ans=tail;
			}
			sum-=arr[tail++];
		}
	}
	printf("%d\n", ans+1);
}


#include <stdio.h>

int main() {
	int n, k;
	scanf("%d %d", &n, &k);
	int arr[n], tail=0, min, ans=0, sum=0;
	for (int i=0;i<n;i++) {
		scanf("%d", &arr[i]);
		sum+=arr[i];
		if (i>=k-1) {
			if (i==k-1) {
				min=sum;
				ans=tail;
			}
			if (sum<min) {
				min=sum;
				ans=tail;
			}
			sum-=arr[tail++];
		}
	}
	printf("%d\n", ans+1);
}


#include<stdio.h>
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	int a[n];
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
    int min=0;
	for (int i=1;i<=k;i++){
		min=min+a[i];
	}
	int cs=1;
	int sum=0;
	for (int i=k+1;i<;i++){
		sum=sum-a[i-k];
		sum=sum+a[i];
		if (min>sum){
			sum=min;
			cs=i-k+1;
		}
	}
	printf("%d",cs);

}


#include<stdio.h>
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	int a[n];
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
    int min=0;
	for (int i=1;i<=k;i++){
		min=min+a[i];
	}
	int cs=1;
	int sum=min;
	for (int i=k+1;i<=n;i++){
		sum=sum-a[i-k];
		sum=sum+a[i];
		if (min>sum){
			min=sum;
			cs=i-k+1;
		}
	}
	printf("%d",cs);

}


#include<stdio.h>
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	int a[n];
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
    int min=0;
	for (int i=1;i<=k;i++){
		min=min+a[i];
	}
	int cs=1;
	int sum=0;
	for (int i=k+1;i<=n;i++){
		sum=sum-a[i-k];
		sum=sum+a[i];
		if (min>sum){
			sum=min;
			cs=i-k+1;
		}
	}
	printf("%d",cs);

}


#include<stdio.h>
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	int a[n];
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
    int min=0;
	for (int i=1;i<=k;i++){
		min=min+a[i];
	}
	int cs=1;
	int sum=0;
	for (int i=k+1;i<n;i++){
		sum=sum-a[i-k];
		sum=sum+a[i];
		if (min>sum){
			sum=min;
			cs=i-k+1;
		}
	}
	printf("%d",cs);

}


#include<stdio.h>

int main()
{
    int n, k, arr[150000], min, index, i, sum = 0;

    scanf("%d%d", &n, &k);
    for (i = 0; i < n; i++)
    {
        /* code */
        scanf("%d", &arr[i]);
    }
    for(i = 0; i < k; i++)
    {
        sum += arr[i];
    }
    min = sum;
    index = 0;

    for(i = 1; i < n - k; i++)
    {
        sum = sum - arr[i - 1] + arr[i + k - 1];
        if(sum < min)
        {
            min = sum;
            index = i;
        }
    }
    printf("%d", index + 1);
    return 0;

}


#include<stdio.h>
#include<limits.h>

int main()
{
    int n, k, arr[150000], min = INT_MAX, index, i, sum;

    scanf("%d%d", &n, &k);
    for (i = 0; i < n; i++)
    {
        /* code */
        scanf("%d", &arr[i]);
    }
    for(i = 0; i < n - 3; i++)
    {
        sum = arr[i] + arr[i + 1] + arr[i + 2];
        if(sum < min)
        {
            min = sum;
            index = i;
        }
    }
    printf("%d", index + 1);
    return 0;

}


#include<stdio.h>

int main()
{
    int n, k, arr[150000], min, index, i, sum = 0;

    scanf("%d%d", &n, &k);
    for (i = 0; i < n; i++)
    {
        /* code */
        scanf("%d", &arr[i]);
    }
    for(i = 0; i < k; i++)
    {
        sum += arr[i];
    }
    min = sum;
    index = 0;

    for(i = 1; i <= n - k; i++)
    {
        sum = sum - arr[i - 1] + arr[i + k - 1];
        if(sum < min)
        {
            min = sum;
            index = i;
        }
    }
    printf("%d", index + 1);
    return 0;

}


/*  AUTHOR:AKASH JAIN
*   USERNAME:akash19jain
*   DATE:01/08/2019
*/
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
#define SC1(x)          scanf("%lld",&x)
#define SC2(x,y)        scanf("%lld%lld",&x,&y)
#define SC3(x,y,z)      scanf("%lld%lld%lld",&x,&y,&z)
#define SCS(x)          scanf("\n%s", x)
#define PF1(x)          printf("%lld\n",x)
#define PF2(x,y)        printf("%lld %lld\n",x,y)
#define PF3(x,y,z)      printf("%lld %lld %lld\n",x,y,z)
#define REP(i,n)        for(long long i=0;i<(n);i++)
#define FOR(i,a,b)      for(long long i=(a);i<=(b);i++)
#define FORD(i,a,b)     for(long long i=(a);i>=(b);i--)
#define WHILE(n)		while(n--)
#define MEM(a, b)       memset(a, (b), sizeof(a))
#define ITOC(c)         ((char)(((int)'0')+c))
#define MID(s,e)        (s+(e-s)/2)
#define SZ(a)		    strlen(a)
#define MOD             1000000007
#define MAX             10000000005
#define MIN             -10000000005
#define PI              3.1415926535897932384626433832795
#define DEB(x)          printf("The value of \"%s\" is: %d\n",#x,x)
#define CASES           ll t;SC1(t);while(t--)
#define ABS(a)          ((a>0)?a:-(a))

const int INF = 1<<29;
typedef long long ll;
typedef unsigned long long ull;
#define FILEIO(name) \  freopen(name".in", "r", stdin); \   freopen(name".out", "w", stdout);
int cmp(const void * a,const void * b);
long long maxv(long long a,long long b);
long long minv(long long a,long long b);
long long gcd(long long u,long long v);

int main()
{
    ll n,k;
    SC2(n,k);
    ll arr[n];
    REP(i,n)
        SC1(arr[i]);

    ll c=0,min=0,index=1;
    REP(i,k)
        c+=arr[i];
    min=c;
    FOR(i,k,n-1)
    {
        c-=arr[i-k];
        c+=arr[i];
        if(c<min)
        {
            min=c;
            index=i+1-k+1;
        }
    }
    PF1(index);
   // DEB(min);
}

//qsort(arr,n,sizeof(arr[0]),cmp);
int cmp (const void * a, const void * b)
{
    if( *(ll*)a - *(ll*)b < 0 ) return -1;
    if( *(ll*)a - *(ll*)b > 0 ) return 1;
        return 0;
}
long long maxv(long long a,long long b)
{
    if(a>b) return a;
        return b;
}
long long minv(long long a,long long b)
{
    if(a<b) return a;
        return b;
}
long long gcd(long long u,long long v)
{
    if (v == 0) return u;
       return gcd(v, u%v);
}


#include<stdio.h>
#include<stdlib.h>
int main()
{
        int n,k,i,j=0,min,p;
        scanf("%d%d",&n,&k);
        n++;
        int *a = (int *)malloc(n*sizeof(int));
        a[0]=0;
        for(i=1;i<n;i++)
        {
                int b;
                scanf("%d",&b);
                a[i]=a[i-1]+b;
        }
        //for(i=0;i<n;i++) printf("%d ",a[i]);
        //printf("  %d  ",a[k]);
        for(i=0;i<n-k;i++)
        {
                if(i==0) min=a[k]-a[0];
                p=a[k+i]-a[i];
                if(min>p)
                {
                        min=p;
                        j=i;
                        //printf("min %d\n j %d\n",min,j);
                }
        }
        printf("%d\n",j+1);

}


#include<stdio.h>
#include<stdlib.h>
int main()
{
        int n,k,i,j=0,min,p;
        scanf("%d%d",&n,&k);
        n++;
        int *a = (int *)malloc(n*sizeof(int));
        a[0]=0;
        for(i=1;i<n;i++)
        {
                int b;
                scanf("%d",&b);
                a[i]=a[i-1]+b;
        }
        //for(i=0;i<n;i++) printf("%d ",a[i]);
        //printf("  %d  ",a[k]);
        for(i=0;i<n-3;i++)
        {
                if(i==0) min=a[k]-a[0];
                p=a[k+i]-a[i];
                if(min>p)
                {
                        min=p;
                        j=i;
                        //printf("min %d\n j %d\n",min,j);
                }
        }
        printf("%d\n",j+1);

}


#include <stdio.h>
#include <limits.h>

int main()
{
    int n, k, i, j, index, sum, min = INT_MAX;
    scanf("%d %d", &n, &k);
    int arr[n];

    for(i=0; i<n; i++)
        scanf("%d", &arr[i]);

    for(i=0; i<n-k+1; i++){
        sum = 0;
        for(j=i; j<(i+k); j++)
            sum = sum + arr[j];

        if(sum < min){
            min = sum;
            index = i + 1;
        }
    }
    printf("%d", index);

	return 0;
}


#include <stdio.h>
#include <limits.h>

int arr[200000];

int main()
{
	int n, k, i, temp, sum = 0, min = INT_MAX, index;
    scanf("%d %d", &n, &k);

    for(i=1; i<=n; i++){
        scanf("%d", &temp);
        sum = sum + temp;
        arr[i] = sum;
    }

    for(i=1; i<=n-k+1; i++){
        if(arr[i+k-1] - arr[i-1] < min){
            min = arr[i+k-1] - arr[i-1];
            index = i;
        }
    }
    printf("%d", index);

	return 0;
}


#include<stdio.h>
int main()
{
    long long int n,i,k,m,p=0,q,s,j,g,z=0;
    scanf("%I64d %I64d", &n, &k);
    int a[n];
    for (long long int i=0; i<n; i++)
        scanf("%I64d", & a[i]);
    m=0;
    for (s=0; m<n; m++)
    {
        p=a[m]+p; z++;
        if (z<k) continue;
        j=p;
        g=j;
        p=0;
        if(j<=g) g=j;
        i++;
        if (i>n-k) break;
    }
    printf("%d", m+1);
    return 0;
}


#include<stdio.h>
int main(void)
{
    int ans;
    long long int n,k,a=0,min=15000001,i,c=0;
    scanf("%I64d %I64d",&n,&k);
    long long int b[n];
    for(i=0;i<n;i++)
    {
        scanf("%I64d",&b[i]);
        a=a+b[i];
        c++;
        if(c==k)
        {
            c--;
            if(a<min){min=a;ans=i-k+2;}
            a=a-b[i-k+1];
        }
    }
    printf("%i",ans);
    return 0;
}


#include<stdio.h>
int main()
{
    long long int n,k,m,p=0,q,s,j;
    scanf("%I64d %I64d", &n, &k);
    int a[n];
    for (long long int i=0; i<n; i++)
        scanf("%I64d", & a[i]);
    for (j=0,q=p; j<n-k ; j++)
    {
        for (m=k; m>0; m--)
        {
            p=a[j+k-m]+p;
        }
        if(j=0) q=p;
        if(p<=q)
        {
            s=j;
        }
    }
    printf("%I64d", s);
    return 0;
}


#include<stdio.h>
int main()
{
    int n,k,m,p=0,q,s,j;
    scanf("%d %d", &n, &k);
    int a[n];
    for (int i=0; i<n; i++)
        scanf("%d", & a[i]);
    for (j=0,q=p; j<k ; j++)
    {
        for (m=k; m>0; m--)
        {
            p=k*a[j]+k-m+p;
        }
        if(p>q)
        {
            s=j;
        }
    }
    printf("%d", j);
    return 0;
}


#include <stdio.h>
#include <limits.h>

int arr[200005], cum_sum[200005];

int main ()
{
	int n, i, k, index, max = INT_MAX;
    scanf("%d %d", &n, &k);

    for(i=1; i<=n; i++){
        scanf("%d", &arr[i]);
        cum_sum[i] = cum_sum[i-1] + arr[i];
    }
    for(i=1; i<=n-k+1; i++){
        if(cum_sum[i+k-1] - cum_sum[i-1] < max){
            max = cum_sum[i+k-1] - cum_sum[i-1];
            index = i;
        }
    }
    printf("%d", index);

	return 0;
}


#include <stdio.h>
#include <limits.h>

int main()
{
    long long int n, k, i, j, index, sum = 0, min = INT_MAX;
    scanf("%I64d %I64d", &n, &k);
    long long int arr[n];

    for(i=0; i<n; i++)
        scanf("%I64d", &arr[i]);

    for(i=0; i<n-k+1; i++){
        sum = 0;
        for(j=i; j<(i+k); j++)
            sum = sum + arr[j];

        if(sum < min){
            min = sum;
            index = i + 1;
        }
    }
    printf("%I64d", index);

	return 0;
}


#include <stdio.h>

int arr[200005], cum_sum[200005];

int main ()
{
	int n, i, k, index, max = INFINITY;
    scanf("%d %d", &n, &k);

    for(i=1; i<=n; i++){
        scanf("%d", &arr[i]);
        cum_sum[i] = cum_sum[i-1] + arr[i];
    }
    for(i=1; i<=n-k+1; i++){
        if(cum_sum[i+k-1] - cum_sum[i-1] < max){
            max = cum_sum[i+k-1] - cum_sum[i-1];
            index = i;
        }
    }
    printf("%d", index);

	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
    int n,k,mn,i,j=0,l,mni;
    scanf("%d %d",&n,&k);
    int a[n];

    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<k;i++)
    j+=a[i];
    mn=j;
    mni=0;

    for(i=1,l=k;i<n,l<n;i++,l++){
        j-=a[i-1];
        j+=a[l];
        if(j<mn){
        mn=j;
        mni=i;
        }

    }
    printf("%d\n",mni+1);
    return 0;
}


void B_Fence()
{
    int n,k,i,j,index;
    long long int mini=99999999, c=0;
    scanf("%d%d",&n,&k);
    int *arr = (int *)malloc(n * sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(n==k)
    {
        printf("1");
        return;
    }
    for(i=0;i<k;i++)c+=arr[i];
    //printf("%d\n",c);
    if(c<mini)
    {
        mini = c;
        index = 1;
    }
    i=0;
    for(j=k;j<n;j++)
    {
        c -= arr[i];
        c += arr[j];
        //printf("%d\n",c);
        i++;
        if(c < mini)
        {
            index = i + 1;
            mini = c;
            //printf("Index: %d",index);
        }
    }
    printf("%d",index);
}

int main()
{
    B_Fence();
    return 0;
}


void B_Fence()
{
    int n,k,i,j,index,mini=9999999;
    scanf("%d%d",&n,&k);
    int *arr = (int *)malloc(n * sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(n==k)
    {
        printf("1");
        return;
    }
    for(i=0;i<(n-k+1);i++)
    {
        int c = arr[i];
        for(j=i+1;j<(i+k);j++)
        {
            c += arr[j];
        }
        if(c<mini)
        {
            index = i + 1;
            mini = c;
        }
    }
    printf("%d",index);
}

int main()
{
    B_Fence();
    return 0;
}


void B_Fence()
{
    int n,k,i,j,index,c=0,mini=9999999;
    scanf("%d%d",&n,&k);
    int *arr = (int *)malloc(n * sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(n==k)
    {
        printf("1");
        return;
    }
    for(i=0;i<k;i++)c+=arr[i];
    //printf("%d\n",c);
    if(c<mini)
    {
        mini = c;
        index = 1;
    }
    i=0;
    for(j=k;j<n;j++)
    {
        c -= arr[i];
        c += arr[j];
        //printf("%d\n",c);
        i++;
        if(c < mini)
        {
            index = i + 1;
            //printf("Index: %d",index);
        }
    }
    printf("%d",index);
}

int main()
{
    B_Fence();
    return 0;
}


void B_Fence()
{
    int n,k,i,j,index,mini=101;
    scanf("%d%d",&n,&k);
    int *arr = (int *)malloc(n * sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<(n-k+1);i++)
    {
        int c = arr[i];
        for(j=i+1;j<(i+k);j++)
        {
            c += arr[j];
        }
        if(c<mini)
        {
            index = i + 1;
            mini = c;
        }
    }
    printf("%d",index);
}

int main()
{
    B_Fence();
    return 0;
}


void B_Fence()
{
    int n,k,i,j,index,c=0,mini=9999999;
    scanf("%d%d",&n,&k);
    int *arr = (int *)malloc(n * sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(n==k)
    {
        printf("1");
        return;
    }
    for(i=0;i<k;i++)c+=arr[i];
    //printf("%d\n",c);
    if(c<mini)
    {
        mini = c;
        index = 1;
    }
    i=0;
    for(j=k;j<n;j++)
    {
        c -= arr[i];
        c += arr[j];
        //printf("%d\n",c);
        i++;
        if(c < mini)
        {
            index = i + 1;
            mini = c;
            //printf("Index: %d",index);
        }
    }
    printf("%d",index);
}

int main()
{
    B_Fence();
    return 0;
}


#include <stdio.h>
#include <stdlib.h>
long long dp[500005];

int main(void)
{
	long long n, k, ele, i, lptr, rptr, min= 1e7, ind;
	scanf("%lld %lld", &n, &k);
	for(i=1; i<=n; i++)
	{
		scanf("%lld", &ele);
		dp[i] = dp[i-1]+ele;
	}
	lptr = 1;
	rptr = k;
	while(rptr <= n)
	{
		if((dp[rptr]-dp[lptr-1]) < min)
		{
			min = dp[rptr]-dp[lptr-1];
			ind = lptr;
		}
		rptr++;
		lptr++;
	}
	printf("%lld\n", ind);
	return 0;
}


#include <stdio.h>
#include <stdlib.h>
long long dp[500005];

int main(void)
{
	long long n, k, ele, i, lptr, rptr, min= 1e8, ind;
	scanf("%lld %lld", &n, &k);
	for(i=1; i<=n; i++)
	{
		scanf("%lld", &ele);
		dp[i] = dp[i-1]+ele;
	}
	lptr = 1;
	rptr = k;
	while(rptr <= n)
	{
		if((dp[rptr]-dp[lptr-1]) < min)
		{
			min = dp[rptr]-dp[lptr-1];
			ind = lptr;
		}
		rptr++;
		lptr++;
	}
	printf("%lld\n", ind);
	return 0;
}


#include<stdio.h>
long long int str[200000],cum_sum[200000];
int main()
{
    long long int n,k,i,j,min,count=1;
    scanf("%lld %lld",&n,&k);
    for(i=0; i<n; i++)
    {
        scanf("%lld",&str[i]);
        if(i==0)
        {
            cum_sum[0]=str[0];
        }
        else
        {
            cum_sum[i]=str[i]+cum_sum[i-1];
        }
    }
    min=cum_sum[k-1];
    for(i=k; i<n; i++)
    {
        if((cum_sum[i]-cum_sum[i-k])<min)
        {
            count=i-k+2;
            min=cum_sum[i]-cum_sum[i-k];
        }
    }
    printf("%lld\n",count);
    return 0;
}


#include<stdio.h>
long long int str[200000],cum_sum[200000];
int main()
{
    long long int n,k,i,min,count=1;
    scanf("%lld %lld",&n,&k);
    for(i=0; i<n; i++)
    {
        scanf("%lld",&str[i]);
        if(i==0)
        {
            cum_sum[0]=str[0];
        }
        else
        {
            cum_sum[i]=str[i]+cum_sum[i-1];
        }
    }
    min=cum_sum[k-1];
    for(i=k; i<n; i++)
    {
        if((cum_sum[i]-cum_sum[i-k])<min)
        {
            count=i-1;
            min=cum_sum[i]-cum_sum[i-k];
        }
    }
    printf("%lld\n",count);
    return 0;
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,k,sum=0,min,l;
   scanf("%d%d",&n,&k);
   int a[n];
   for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    if(n!=k)
    {
    for(int i=0;i<k;i++)
    {
        sum+=a[i];
    }
    min=sum;
    for(int j=0;j<(n-k);j++)
     {
         sum=sum-a[j]+a[k+j];
         if(min>sum)
            {min=sum;
            l=(j+2);
            }
     }
     printf("%d",l);
    }
    else
        printf("1");

    return 0;
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,k,sum=0,min,l;
   scanf("%d%d",&n,&k);
   int a[n];
   for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(int i=0;i<k;i++)
    {
        sum+=a[i];
    }
    min=sum;
    for(int j=0;j<(n-k);j++)
     {
         sum=sum-a[j]+a[k+j];
         if(min>sum)
            {min=sum;
            l=(j+2);
            }
     }
     printf("%d",l);

    return 0;
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,k,sum=0,min,l=0;
   scanf("%d%d",&n,&k);
   int a[n];
   for(int i=0;i<n;i++)
    scanf("%d",&a[i]);

    for(int i=0;i<k;i++)
    {
        sum+=a[i];
    }
    min=sum;
    for(int j=1;j<=(n-k+1);j++)
     {
         sum=sum-a[j-1]+a[k+j-1];
         if(min>sum)
            {min=sum;
            l=(j);
            }
     }
     printf("%d",l);

    return 0;
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,m,sum=0,r=100000000,l;
   scanf("%d%d",&n,&m);
   int a[n];
   for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(int j=0;j<(n-m);j++)
    {sum=0;
   for(int i=j;i<j+m;i++)
   {
       sum+=a[i];

   }

   if(sum<=r)
   {r=sum;
   l=j;
   }
   }
   printf("%d",(l+1));

    return 0;
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,m,sum=0,r=100000000,l;
   scanf("%d%d",&n,&m);
   int a[n];
   for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    if(n!=m)
    {
    for(int j=0;j<(n-m);j++)
    {sum=0;
   for(int i=j;i<j+m;i++)
   {
       sum+=a[i];

   }

   if(sum<=r)
   {r=sum;
   l=j;
   }
   }
   printf("%d",(l+1));
    }
    else
        printf("1");

    return 0;
}


#include<stdio.h>
int main()
{
    long long a[200000],n,k,i,j,total=0,min,s;
    scanf("%lld%lld",&n,&k);
    for(i=1;i<=k;i++)
    {
        scanf("%lld",&a[i]);
        total=total+a[i];
        min=total;
        s=1;
    }
    for(j=k+1;j<=n;j++)
    {
        scanf("%lld",&a[j]);
        total=total-a[j-k]+a[j];
        if(total<min)
        {
            min=total;
            s=j-k+1;
        }
    }
    printf("%lld\n",s);
    return 0;
}


#include <stdio.h>

#define N 150000
#define INF 0x3f3f3f3f

int main() {
	static int hh[N], dp[N];
	int n, k, i, i_, min;

	scanf("%d%d", &n, &k);
	for (i = 0; i < n; i++)
		scanf("%d", &hh[i]);
	for (i = 0; i < k; i++)
		dp[0] += hh[i];
	for (i = 1; i <= n - k; i++)
		dp[i] = (dp[i - 1] + hh[i + k - 1]) - hh[i - 1];
	min = INF;
	i_ = -1;
	for (i = 0; i <= n - k; i++)
		if (min > dp[i]) {
			min = dp[i];
			i_ = i;
		}
	printf("%d\n", i_ + 1);
	return 0;
}


#include <stdio.h>

#define N 150000
#define INF 0x3f3f3f3f

int main() {
	static int hh[N];
	int n, k, i, i_, minsum, min;

	scanf("%d%d", &n, &k);
	for (i = 0; i < n; i++)
		scanf("%d", &hh[i]);
	minsum = min = INF;
	i_ = -1;
	for (i = 0; i <= n - k; i++) {
		int j, s, m;

		s = 0;
		m = INF;
		for (j = i; j <= i + k - 1; j++) {
			s += hh[j];
			if (m > hh[j])
				m = hh[j];
		}
		if (minsum > s || min > m) {
			minsum = s;
			min = m;
			i_ = i;
		}
	}
	printf("%d\n", i_ + 1);
	return 0;
}


#include<stdio.h>
int main()
{
    long long int t,i,j,k,cnt,l,a,b,c,max=0;
    scanf("%lld %lld",&a,&b);
    int ara[a];
    for(i=0;i<a;i++){
        scanf("%lld",&ara[i]);
        if(ara[i]>max) max =ara[i];
    }
    if (b==1){
        printf("%d",max+1);
    }
    else{
            for(i=1;;i++){
        cnt=((i+b-1)*(i+b-1+1)/2)-(i*(i+1)/2);
        if(cnt>max){
            printf("%d\n",i);
            break;
        }
    }
    }

    return 0;
}


#include<stdio.h>
int main()
{
    long long int t,i,j,k,cnt,l,a,b,c,max=0;
    scanf("%lld %lld",&a,&b);
    int ara[a];
    for(i=0;i<a;i++){
        scanf("%lld",&ara[i]);
        if(ara[i]>max) max =ara[i];
    }
    for(i=1;;i++){
        cnt=((i+b-1)*(i+b-1+1)/2)-(i*(i+1)/2);
        if(cnt>max){
            printf("%d\n",i);
            break;
        }
    }
    return 0;
}


#include<stdio.h>
int main()
{
    long long int t,i,j,k,cnt,l,a,b,c,max=0;
    scanf("%lld %lld",&a,&b);
    int ara[a];
    for(i=0;i<a;i++){
        scanf("%lld",&ara[i]);
        if(ara[i]>max) max =ara[i];
    }
    if (b==1){
        printf("%d",1);
    }
    else{
            for(i=1;;i++){
        cnt=((i+b-1)*(i+b-1+1)/2)-(i*(i+1)/2);
        if(cnt>max){
            printf("%d\n",i);
            break;
        }
    }
    }

    return 0;
}


#include<stdio.h>
int main()
{
    long long int t,i,j,k,cnt,l,a,b,c,min;
    scanf("%lld %lld",&a,&b);
    int ara[a];
    int dp[150000]={0};
    for(i=0;i<a;i++){
        scanf("%d",&ara[i]);
    }
    for(i=0;i<b;i++){
        dp[1]+=ara[i];
    }
    for(i=2;i<=a-b+1;i++){
        dp[i]=dp[i-1]-ara[i-2]+ara[i+b-2];
    }
    min = dp[1];
    cnt = 1;
//    for(i=1;i<=a-b+1;i++)
//        printf("%d ",dp[i]);
//    printf("\n");
    for(i=2;i<=a-b+1;i++){
        if(dp[i]<min){
            min = dp[i];
            cnt = i;
        }
    }
    printf("%lld\n",cnt);
    return 0;
}


#include<stdio.h>
int main()
{
    long long int t,i,j,k,cnt,l,a,b,c,max=0;
    scanf("%lld %lld",&a,&b);
    int ara[a];
    for(i=0;i<a;i++){
        scanf("%lld",&ara[i]);
        if(ara[i]>max) max =ara[i];
    }
    if (b==1){
        printf("%d",1);
    }
    else{
    for(i=1;;i++){
        cnt=((i+b-1)*(i+b)/2)-(i*(i-1)/2);
        if(cnt>max){
            printf("%d\n",i);
            break;
        }
    }
    }

    return 0;
}


#include<stdio.h>
#include<math.h>
int main()
{
    long long int n,k;
    scanf("%lld %lld",&n,&k);
    long long int i,a[n];
    for(i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    long long int j,sum=0,min=k*n,x=0;
    for(i=0;i<n-k+1;i++)
    {
        sum=0;
        for(j=i;j<i+k;j++)
        {
            sum+=a[j];
        }
        if(sum<min)
        {
            min=sum;
            x=i+1;
        }
    }
    printf("%lld",x);
    return 0;
}


#include<stdio.h>
#include<math.h>
int main()
{
    long long int n,k;
    scanf("%lld %lld",&n,&k);
    long long int i,a[n];
    for(i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    long long int j,sum=0,min=301,x=0;
    for(i=0;i<n-k+1;i++)
    {
        sum=0;
        for(j=i;j<i+k;j++)
        {
            sum+=a[j];
        }
        if(sum<min)
        {
            min=sum;
            x=i+1;
        }
    }
    printf("%lld",x);
    return 0;
}


#include<stdio.h>
#include<math.h>
int main()
{
    long long int n,k;
    scanf("%lld %lld",&n,&k);
    long long int i,a[n];
    for(i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    long long int j,sum=0,min,x=0;
    for(i=0;i<n-k+1;i++)
    {
        sum=0;
        for(j=i;j<i+k;j++)
        {
            sum+=a[j];
        }
        if(sum<min || i==0)
        {
            min=sum;
            x=i+1;
        }
    }
    printf("%lld",x);
    return 0;
}


#include<stdio.h>
int main ()
{
	long long int n ,k , h[150000] , l=0 , i ,sum=0, min=100000000000 ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<k ; i++)
	{
	    sum+=h[i];
	}
	min=sum;
	for(i=1 ; i<=n-k ; i++)
	{
		sum+=h[i+k-1]-h[i-1];
		if(sum<min)
   	    {
		   min = sum;
		   l=i;
        }
	}
	printf("%d",l+1);
	return 0;
}


#include<stdio.h>

int main()
{
    int n,k,i,j,x;
    scanf("%d %d",&n,&k);
    int a[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);

    }
    long long int sum,min=99999999999999;
    for(i=k-1;i<n;i++)
    {
        sum=0;
        for(j=i;j>=0;j--)
            sum+=a[j];
        if(sum<min)
            {
                min=sum;
                x=i+1;
            }
    }
    printf("%d\n",x);

    return 0;
}


#include<stdio.h>

int main()
{
    int n,k,i,j,x;
    scanf("%d %d",&n,&k);
    int a[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);

    }
    long long int sum,min=999999999999999;
    for(i=k-1;i<n;i++)
    {
        sum=0;
        for(j=i;j>=0;j--)
            sum+=a[j];
        if(sum<min)
            {
                min=sum;
                x=i+1;
            }
    }
    printf("%d\n",x);

    return 0;
}


#include<stdio.h>

int main()
{
    int n,k,i,j,x;
    scanf("%d %d",&n,&k);
    int a[n];
    long long int sum[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    sum[0]=a[0];
    for(i=1;i<n;i++)
    {
        sum[i]=sum[i-1]+a[i];
    }
    long long int min=sum[k-1];
    int m=1;
    for(i=k;i<n;i++)
    {
        if((sum[i]-sum[i-k])<min)
        {
            min=sum[i]-sum[i-k];
            m=i-k+2;
        }

    }
    printf("%d\n",m);

    return 0;
}


#include<stdio.h>

int main()
{
    int n,k,i,j,x,m=0;
    scanf("%d %d",&n,&k);
    int a[n];
    long long int sum[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    sum[0]=a[0];
    for(i=1;i<n;i++)
    {
        sum[i]=sum[i-1]+a[i];
    }
    long long int min=99999999999999;
    for(i=k-1;i<n;i++)
    {
        if((sum[i]-sum[i-k+1])<min)
        {
            min=sum[i]-sum[i-k+1];
            m=i-k+2;
        }

    }
    printf("%d\n",m);

    return 0;
}


#include<stdio.h>
int main()
{
   int n,h[100000],sum=0,min,i,j,k;
    scanf("%d %d",&n,&k);
  for(i=0;i<n;i++)
   scanf("%d",&h[i]);
  for(i=0;i<k;i++)
   sum+=h[i];
  min=sum;
  j=0;
  for(i=1;i<n-k+1;i++)
  {
  sum=sum+h[i+k-1]-h[i-1];
  if(sum<min)
  {
  min=sum;
  j=i;
  }
 }
  printf("%d", j+1);
   return 0;
}


#include<stdio.h>
int main()
{
   int n,h[150000],sum=0,min,i,j,k;
    scanf("%d %d",&n,&k);
  for(i=0;i<n;i++)
   scanf("%d",&h[i]);
  for(i=0;i<k;i++)
   sum+=h[i];
  min=sum;
  j=0;
  for(i=1;i<n-k+1;i++)
  {
  sum=sum+h[i+k-1]-h[i-1];
  if(sum<min)
  {
  min=sum;
  j=i;
  }
 }
  printf("%d", j+1);
   return 0;
}


#include <stdio.h>

int main(void) {
	int n,h,i,j,sum=0,fsum=0,point;
	scanf("%d%d",&n,&h);

	int a[n];
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);

 	for(j=0;j<h;j++)
		 sum=sum+a[j];

		 point=0;
	for(i=0;i<n-h;i++){
	 if((sum-a[i]+a[i+h])<sum){

     fsum=sum-a[i]+a[i+h];
	   point=i+1;
	    }
   sum=sum-a[i]+a[i+h];
	}
	printf("%d\n",point+1);

	return 0;
}


#include <stdio.h>

int main(void) {
	int n,h,i,j,sum=0,fsum=0,point;
	scanf("%d%d",&n,&h);

	int a[n];
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);

 	for(j=0;j<h;j++)
		 sum=sum+a[j];

		 point=0;
	for(i=0;i<n-h;i++){
	 if((sum-a[i]+a[i+h+1])<sum){
	   fsum=sum;
	   point=i+1;
	   sum=sum-a[i]+a[i+h+1]; }

	}
	printf("%d\n",point);

	return 0;
}


#include <stdio.h>

int main(void) {
	int n,h,i,j,sum=0,fsum,point=0;
	scanf("%d%d",&n,&h);

	int a[n];
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);

 	for(j=0;j<h;j++)
		 sum=sum+a[j];
		 fsum=sum;
	for(i=0;i<n-h;i++){
	 if((sum-a[i]+a[i+h])<fsum){

     fsum=sum-a[i]+a[i+h];
	   point=i+1;
	    }
   sum=sum-a[i]+a[i+h];
	}
	printf("%d",point+1);

	return 0;
}


#include <stdio.h>

#define MIN(x, y) (((x) < (y)) ? (x) : (y))

int main(void) {
    int n = 0;
    int k = 0;

    scanf("%d %d", &n, &k);

    int arr[n];

    for (int i = 0, a = 0, b = 0; i < n; i++) {
        scanf("%d", &a);
        arr[i] = a + b;
        b = arr[i];
    }

    int m = arr[k - 1];
    int r = 0;

    for (int i = 1, j = k; j < n; i++, j++) {
        int tmp = arr[j] - arr[i - 1];
        if (m > tmp) {
            r = i + 1;
            m = tmp;
        }
    }

    printf("%d\n", r > 0 ? r : 1);
    return 0;
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , l=0 , i ,sum=0, min=10000000 ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<k ; i++) sum+=h[i];
	for(i=1 ; i<=n-k ; i++)
	{
		sum+=h[i+k-1]-h[i-1];
		if(sum<min)
   	    {
		   min = sum;
		   l=i;
        }
	}
	printf("%d",l);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , l=0 , i ,sum=0, min=100000000000 ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<k ; i++) sum+=h[i];
	min=sum;
	for(i=1 ; i<=n-k ; i++)
	{
		sum+=h[i+k-1]-h[i-1];
		if(sum<min)
   	    {
		   min = sum;
		   l=i;
        }
	}
	printf("%d",l+1);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , l=0 , i ,sum=0, min=10000000 ;
	scanf("%lld %lld",&n,&k);
	for(i=1 ; i<=n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=1 ; i<=k ; i++) sum+=h[i];
	for(i=1 ; i<=n-k+1 ; i++)
	{
		sum+=h[i+k-1]-h[i-1];
	}
	if(sum<min)
	{
		min = sum;
		l=i;
	}
	printf("%d",l);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , i ,sum=0, tmp , j ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<n ; i++)
	{
		if(h[i]%k==0) break;
	}
	printf("%lld",i!=n?i+1:1);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , i ,sum=0, tmp , j ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<n ; i++)
	{
		if(h[i]%k==0) break;
	}
	printf("%lld",(i+1)>=n?i+1:1);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , l=0 , i ,sum=0, min=10000000 ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<k ; i++) sum+=h[i];
	for(i=1 ; i<=n-k ; i++)
	{
		sum+=h[i+k-1]-h[i-1];
		if(sum<min)
   	    {
		   min = sum;
		   l=i;
        }
	}
	printf("%d",l+1);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[100] , i ,sum=0, tmp , j ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<n ; i++)
	{
		if(h[i]%k==0) break;
	}
	printf("%lld",i+1!=n?i+1:1);
}


#include<stdio.h>
int main (void)
{
	int n ,k , h[100] , i ,sum=0, tmp , j ;
	scanf("%d %d",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%d",&h[i]);
	}
	for(i=0 ; i<n ; i++)
	{
		if(h[i]%k==0) break;
	}
	printf("%d",i+1);
}


#include<stdio.h>
int main (void)
{
	long long int n ,k , h[150000] , i ,sum=0, tmp , j ;
	scanf("%lld %lld",&n,&k);
	for(i=0 ; i<n ; i++)
	{
		scanf("%lld",&h[i]);
	}
	for(i=0 ; i<n ; i++)
	{
		if(h[i]%k==0) break;
	}
	printf("%lld",(i+1)<=n?i+1:1);
}


#include<bits/stdc++.h>
using namespace std;

const int maxn = 5010;
char giraffe[maxn][maxn];
bool gir[maxn][maxn];
vector<int> victor[maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex : victor[cur]){
        if(gir[nex][pre]){
            cout << pre + 1 << ' ' << cur + 1 << ' ' << nex + 1 << '\n';
            exit(0);
        }
        if(!visited[nex]){
            visited[cur] = true;
            dfs(cur, nex);
        }
    }
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> giraffe[i];
        for(int j = 0; j < n; j++)
            if(giraffe[i][j] == '1'){
                victor[i].push_back(j);
                gir[i][j] = 1;
            }
    }
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include<bits/stdc++.h>
using namespace std;

const int maxn = 10000;
string giraffe[maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex = 0; nex < n; nex++){
        if(giraffe[cur][nex] == '1'){
            if(pre && giraffe[nex][pre] == '1'){
                cout << nex + 1 << ' ' << pre + 1 << ' ' << cur + 1 << '\n';
                exit(0);
            }
            if(!visited[nex]){
                visited[cur] = true;
                dfs(cur, nex);
            }
        }
    }
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> giraffe[i];
    //visited[0] = true;
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include<bits/stdc++.h>
using namespace std;

const int maxn = 5010;
char giraffe[maxn][maxn];
bool gir[maxn][maxn];
vector<int> victor[maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex : victor[cur]){
        if(gir[nex][pre]){
            cout << pre + 1 << ' ' << cur + 1 << ' ' << nex + 1 << '\n';
            exit(0);
        }
        if(!visited[nex]){
            visited[nex] = true;
            dfs(cur, nex);
        }
    }
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> giraffe[i];
        for(int j = 0; j < n; j++)
            if(giraffe[i][j] == '1'){
                victor[i].push_back(j);
                gir[i][j] = 1;
            }
    }
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include<bits/stdc++.h>
using namespace std;

const int maxn = 5010;
string giraffe[maxn];
vector<int> victor[maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex : victor[cur]){
        if(pre && giraffe[nex][pre] == '1'){
            cout << nex + 1 << ' ' << pre + 1 << ' ' << cur + 1 << '\n';
            exit(0);
        }
        if(!visited[nex]){
            visited[cur] = true;
            dfs(cur, nex);
        }
    }
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> giraffe[i];
        for(int j = 0; j < n; j++)
            if(giraffe[i][j] == '1')
                victor[i].push_back(j);
    }
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;

const int maxn = 10000;
char giraffe[maxn][maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex = 0; nex < n; nex++){
        if(giraffe[cur][nex] == '1'){
            if(giraffe[nex][pre] == '1'){
                cout << nex + 1 << ' ' << pre + 1 << ' ' << cur + 1 << '\n';
                exit(0);
            }
            if(!visited[nex]){
                visited[nex] = true;
                dfs(cur, nex);
            }
        }
    }
}
int main(){
	IOS;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> giraffe[i];
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include<bits/stdc++.h>
using namespace std;

const int maxn = 10000;
string giraffe[maxn];
bool visited[maxn];
int n;
void dfs(int pre, int cur){
    for(int nex = 0; nex < n; nex++){
        if(giraffe[cur][nex] == '1'){
            if(pre && giraffe[nex][pre] == '1'){
                cout << nex + 1 << ' ' << pre + 1 << ' ' << cur + 1 << '\n';
                exit(0);
            }
            if(!visited[nex]){
                visited[nex] = true;
                dfs(cur, nex);
            }
        }
    }
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> giraffe[i];
    for(int i = 0;  i < n; i++)
        if(!visited[i])
            dfs(-1, i);
    cout << "-1\n";
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define all(v) v.begin(),v.end()
#define X first
#define Y second
#define rep(x, y, z) for(ll (z) = (x); (z) < (y); (z)++)

int constexpr N = 5 * 1e3;
int constexpr MOD = 1e9 + 7;
int constexpr INF = 1e9;

bool adj[N][N], mark[N];
vector<int> g[N];

int main() {
//    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

    int n;
    cin >> n;
    rep (0, n, i) {
        rep (0, n, j) {
            char c;
            scanf(" %c", &c);
            if (c - '0') g[i].push_back(j);
        }
    }
    rep (0, n, i) {
        for (auto u : g[i]) {
            mark[u] = true;
            for (auto v : g[u]) {
                if (!mark[v]) return cout << i + 1 << ' ' << u + 1 << ' ' << v + 1, 0;
            }

        }
    }
    cout << -1;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define all(v) v.begin(),v.end()
#define X first
#define Y second
#define rep(x, y, z) for(ll (z) = (x); (z) < (y); (z)++)

int constexpr N = 5 * 1e3;
int constexpr MOD = 1e9 + 7;
int constexpr INF = 1e9;

vector<int> g[N];
bool mark[N], adj[N][N];

tuple<int, int, int> dfs(int v, int p) {
    mark[v] = true;
//    cerr << v << ' ' << dep[v] << '\n';
    for (auto u : g[v]) {
        if (p != -1 && adj[u][p]) {
            return {p, v, u};
        }
        if (!mark[u]) {
            int v1, v2, v3;
            tie(v1, v2, v3) = dfs(u, v);
            if (v1 != -1) return {v1, v2, v3};
        }
    }
    return {-1, -1, -1};
}
int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

    int n;
    cin >> n;
    rep (0, n, i) {
        rep (0, n, j) {
            char c;
            cin >> c;
//            cerr << c << ' ';
            adj[i][j] = c - '0';
            if (c - '0') g[i].push_back(j);
        }
    }
    rep (0, n, i) {
        if (!mark[i]) {
            int v1, v2, v3;
            tie(v1, v2, v3) = dfs(i, -1);
            //    if (v1 == -1) cout << -1;
            if (v1 != -1) return cout << v1 + 1 << ' ' << v2 + 1 << ' ' << v3 + 1, 0;
        }
    }
    cout << -1;
//    else {
//        reverse(all(res));
//        rotate(res.begin(), res.begin() + 1, res.end());
//        deque<int> vs(all(res));
//        int f = res.back(), v = res[1];
//        vs.pop_back();
//        while (vs.size() > 2) {
//            if (adj[f][v]) {
//                while (vs.front() != v) vs.pop_front();
//            } else {
//                while (vs.back() != v) vs.pop_back();
//            }
//            v = vs[0];
//        }
//        for (auto u : vs)
//            cout << u + 1 << ' ';
//        cout << f + 1;
//    }
    return 0;
}