#include <cstdio>
#include <list>
#include <cstring>
using namespace std;

typedef list <int> :: iterator lii;
int n;
list <int> a[1024];
int d[1024][1024];
int v[1024], s[1024], p[1024];

int go ()
{
	//printf ("Going...\n");
	/*
	for (int i = 1; i <= n; ++i, printf ("\n"))
		for (int j = 1; j <= n; ++j)
			printf ("%d ", d[i][j]);
	*/

	int st = 0;
	for (int i = 1; i <= n; ++i)
	{
		if (s[i] == 0) continue;
		if (s[i] == 1) { st = i; break; }
		if (st == 0) st = i;
	}
	if (st == 0) return 0;
	memset (v, 0, sizeof (v));
	memset (p, 0, sizeof (p));
	//printf ("Starting node: %d\n", st);

	while (1)
	{
		//printf ("\nnext while, current node: %d\n", st);
		v[st] = 1;
		lii i;
		//printf ("tadadadan...\n"); fflush (stdout);
		for (i = a[st].begin (); i != a[st].end (); ++i)
		{
			//printf ("%d ", *i); fflush (stdout);
			while (d[st][*i] != 0) { i = a[st].erase (i); if (i == a[st].end ()) goto done; }
			if (*i == p[st]) continue;
			if (v[*i])
			{
				//printf ("found cycle: %d", *i);
				d[st][*i] = 1; d[*i][st] = -1; s[*i] -= 2;
				for (int j = st; j != *i; j = p[j]) { d [p[j]][j] = 1; d[j][p[j]] = -1; s[j] -= 2; }
				return 1;
			}
			p[*i] = st;
			st = *i;
			break;
done:;
		}
		if (i == a[st].end ())
		{
			//printf ("cycle not found\n");
			for (int j = st; p[j] != 0; j = p[j])
			{
				//printf ("j "); fflush (stdout);
				d[p[j]][j] = 1; --s[p[j]];
				d[j][p[j]] = -1; --s[j];
			}
			return 1;
		}
	}
}

int main ()
{
	int m;
	scanf ("%d%d", &n, &m);
	int p, q;
	for (int i = 0; i < m; ++i)
	{
		scanf ("%d%d", &p, &q);
		a[p].push_front (q);
		a[q].push_front (p);
		++s[p]; ++s[q];
	}

	while (go ());

	printf ("Yes\n");
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= n; ++j)
			if (d[i][j] == 1)
				printf ("%d %d\n", i, j);
	return 0;
}

