#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

#define inf 1999888777
#define eps 0.000001
#define pi 3.14159265358979

int n,s[2222],pr[2222],qx[111222],qy[111222],res[1111][1111];
bool mark[2222],w[1111][1111];

void nadjiciklus(int x, int y) {

    int i,k,n1,n2,px,py,t1[1111],t2[1111];

    n1=0; n2=0; px=x; py=y;
    while (px!=-1) {
    	t1[n1]=px;
    	if (pr[px]!=-1 && !w[px][pr[px]]) return;
    	px=pr[px];
    	n1++;
    }
    while (py!=-1) {
    	t2[n2]=py;
    	if (pr[py]!=-1 && !w[py][pr[py]]) return;
    	py=pr[py];
    	n2++;
    }
    k=1;
    while ( k<=n1 && k<=n2 && t1[n1-k]==t2[n2-k] ) k++;
    k--;

    res[y][x]=1;
    w[x][y]=false; w[y][x]=false;
    s[x]--; s[y]--;
    for(i=k; i<n1; i++) {
	   res[t1[n1-i-1]][t1[n1-i]]=1;
	   w[t1[n1-i-1]][t1[n1-i]]=false;
	   w[t1[n1-i]][t1[n1-i-1]]=false;
	   s[t1[n1-i-1]]--;  s[t1[n1-i]]--;
    }
    for(i=k; i<n2; i++) {
       res[t2[n2-i]][t2[n2-i-1]]=1;
       w[t2[n2-i]][t2[n2-i-1]]=false;
       w[t2[n2-i-1]][t2[n2-i]]=false;
       s[t2[n2-i]]--; s[t2[n2-i-1]]--;
    }

    return;
}


void bfs(int t) {

	int p,k,x,j,xx[1111];

	mark[t]=true;
	xx[1]=t; p=0; k=1; pr[t]=-1;
	while (p<k) {
		p++;
		x=xx[p];
		for(j=0; j<n; j++) if (w[x][j]) {
            if (mark[j]) {
			    if (pr[x]!=j) {

			    	nadjiciklus(x,j);

			    }
            } else {
            	k++;
            	xx[k]=j;
            	mark[j]=true;
            	pr[j]=x;
            }
		}
	}

	return;
}


int main() {

	 int m,i,j,x,y,l,t,si[1111],su[1111];
	 bool lose;

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

	 for(i=0; i<n+10; i++) {
	 	s[i]=0;
	 	si[i]=0;
	 	su[i]=0;
	 	mark[i]=0;
	 	for(j=0; j<n+10; j++) res[i][j]=0;
	 }

	 for(i=0; i<m; i++) {

	 	scanf("%d%d", &x, &y);
	 	x--; y--;
	 	w[x][y]=true;
	 	w[y][x]=true;
	 	s[x]++; s[y]++;
	 	qx[i]=x; qy[i]=y;

	 }

     for(i=0; i<n; i++) {

     	 if (!mark[i]) bfs(i);

     }


     for(i=0; i<n; i++) if (s[i]%2==1) {

     	x=i;
     	t=0; while(!w[x][t]) t++;
     	while (s[t]%2==0) {
		   w[x][t]=false; w[t][x]=false;
		   s[x]--; s[t]--;
		   res[x][t]=1;
		   x=t;
		   t=0; while(!w[x][t]) t++;
     	}
     	w[x][t]=false; w[t][x]=false;
		s[x]--; s[t]--;
		res[x][t]=1;

     }

     lose=false;
     for(i=0; i<m; i++) {
     	if (res[qx[i]][qy[i]]) {
     		si[qx[i]]++; su[qy[i]]++;
     	}
     	else if (res[qy[i]][qx[i]]) {
     		si[qy[i]]++; su[qx[i]]++;
     	}
     	else lose=true;
     }

     for(i=0; i<n; i++) if (abs(si[i]-su[i])>1) lose=true;

     if (lose) printf("No\n");
     else {
        printf("Yes\n");
        for(i=0; i<m; i++) {
        	if (res[qx[i]][qy[i]]) printf("%d %d\n", qx[i]+1, qy[i]+1);
        	else printf("%d %d\n", qy[i]+1, qx[i]+1);
        }
     }

     return 0;
}