/*
TASK:like
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
struct vrux{
  bool nech,need_fix;int used;
  vrux(bool _ne=false,bool _nf=false){nech=_ne;need_fix=_nf;used=0;}
};
struct edge{
  int f,t;char type;
  edge(int _f=0,int _t=0){f=_f;t=_t;type='?';}
  int next(int to){return((to==f)?t:f);}
};
int n,m;
vector<edge> U;
vector<int> fo[1010];
vector<vrux> vr;
// Proveri tova
void dfs(int v){
  vr[v].used=1;
  int i,j;
  vector<int> nf,ef; // nech nasl
  for(i=0;i<fo[v].size();++i){
   j=U[fo[v][i]].next(v);
   if(vr[j].used==0){dfs(j);if(vr[j].need_fix){nf.push_back(j);ef.push_back(fo[v][i]);}}
                              }
  for(i=0;i<nf.size();i+=2){
   j=i+1;if(j>=nf.size())break;
   if(U[ef[i]].t!=v)U[ef[i]].type='O';
   else U[ef[i]].type='P';
   if(U[ef[j]].t!=nf[j])U[ef[j]].type='O';
   else U[ef[j]].type='P';
                           }
  if(nf.size()%2==1){
   i=nf.size()-1;
   if(U[ef[i]].t!=v)U[ef[i]].type='O';
   else U[ef[i]].type='P';
                    }
  if(vr[v].nech && nf.size()%2==0)vr[v].need_fix=true;
  if(!vr[v].nech && nf.size()%2==1)vr[v].need_fix=true;
}
// Ojlerov cikul
void ojler_dfs(int v){
  int i,j;
  for(i=0;i<fo[v].size();++i){
   j=U[fo[v][i]].next(v);
   if(U[fo[v][i]].type=='?'){
    if(U[fo[v][i]].t==j)U[fo[v][i]].type='P';
    else U[fo[v][i]].type='O';
    ojler_dfs(j);
                            }
                             }
}
// PROVERKA
int sv[1010],si[1010];
inline int ABS(int w){return ((w<0)?(-w):w);}
int main(){
  int i,j,k,l;
  //system("pause");
  scanf("%d%d",&n,&m);
  for(i=0;i<m;++i){
   scanf("%d%d",&k,&l);
   k--;l--;
   U.push_back(edge(k,l));
   fo[k].push_back(U.size()-1);fo[l].push_back(U.size()-1);
                  }
  vr.resize(n);
  for(i=0;i<n;++i)if(fo[i].size()%2==1)vr[i].nech=true;
  for(i=0;i<n;++i)
   if(vr[i].used==0)dfs(i);
  for(i=0;i<n;++i)ojler_dfs(i);
  // check if is valid
  for(i=0;i<m;++i)
   if(U[i].type=='P'){++si[U[i].f];++sv[U[i].t];}
   else{++si[U[i].t];++sv[U[i].f];}
  bool OK=true;
  for(i=0;i<n;++i)
   if(ABS(si[i]-sv[i])>1){OK=false;break;}
  // </end>
  if(!OK)printf("No\n");
  else{
   printf("Yes\n");
   for(i=0;i<m;++i){
    if(U[i].type=='P')printf("%d %d\n",U[i].f+1,U[i].t+1);
    else printf("%d %d\n",U[i].t+1,U[i].f+1);
                   }
      }
  return 0;
}
