#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>

#define repi(n) for (int i=0;i<=n;i++)
#define repj(n) for (int j=0;j<n;j++)
#define repk(n) for (int k=0;k<n;k++)
#define pb(x) push_back(x)
#define pause() system("pause");
#define MAXN 1024
#define pii pair<int,int>
#define left first
#define right second

using namespace std;

int n,m;
int cnt[MAXN];
int cnt_odd;
int cnt_vh[MAXN];
int cnt_izh[MAXN];
int odd[MAXN];
vector<int> ve[MAXN];

void init() {
     scanf("%d%d",&n,&m);
     repi(m) {
             pii b;
             scanf("%d%d",&b.left,&b.right);
             cnt[b.left]++;
             cnt[b.right]++;
             if (b.left<b.right) ve[b.left].pb(b.right);
             else ve[b.right].pb(b.left);
     }
}

void print(int t) {
     if (t==0) cout << "No\n";
     else cout << "Yes\n";
}

void make_vh(int i) {
     for (int j=1;j<i;j++) {
         int h;
         for (h=0;h<ve[j].size();h++)
             if (ve[j][h]==i) break;
         if (h!=ve[j].size()) {
            printf("%d %d\n",j,i);
            cnt[i]--;
            cnt[j]--;
            cnt_vh[i]++;
            cnt_izh[j]++;
            ve[j][h]=0;
            if (cnt[j]-cnt_izh[j]+cnt_vh[j]==odd[j]) make_vh(j);
            }
     }
     for (int j=0;j<ve[i].size();j++) {
         if (ve[i][j]==0) continue;
         printf("%d %d\n",ve[i][j],i);
         cnt[i]--;
         cnt[ve[i][j]]--;
         cnt_vh[i]++;
         cnt_izh[ve[i][j]]++;
         if (cnt[ve[i][j]]-cnt_izh[ve[i][j]]+cnt_vh[ve[i][j]]==odd[ve[i][j]]){ int r=ve[i][j]; ve[i][j]=0; make_vh(r);}
     }
}

void make_izh(int i) {
     for (int j=1;j<i;j++) {
         int h;
         for (h=0;h<ve[j].size();h++)
             if (ve[j][h]==i) break;
         if (h!=ve[j].size()) {
            printf("%d %d\n",i,j);
            cnt[i]--;
            cnt[j]--;
            cnt_izh[i]++;
            cnt_vh[j]++;
            ve[j][h]=0;
            if (cnt[j]-cnt_vh[j]+cnt_izh[j]==odd[j]) make_izh(j);
            }
     }
     for (int j=0;j<ve[i].size();j++) {
         if (ve[i][j]==0) continue;
         printf("%d %d\n",i,ve[i][j]);
         cnt[i]--;
         cnt[ve[i][j]]--;
         cnt_izh[i]++;
         cnt_vh[ve[i][j]]++;
         if (cnt[ve[i][j]]-cnt_vh[ve[i][j]]+cnt_izh[ve[i][j]]==odd[ve[i][j]]) {int r=ve[i][j]; ve[i][j]=0; make_izh(r);}
     }
}

void solve() {
     int br=0;
     repi(n) if (cnt[i]%2) { br++; odd[i]=1;}
     if (br%2) {print(0); return;}
     cnt_odd=br;
     print(2);
     for (int i=1;i<=n;i++) {
          for (int j=0;j<ve[i].size();j++) {
               if (ve[i][j]==0) continue;
               if (cnt[i]-1>=cnt_izh[i]+1-cnt_vh[i] && cnt[ve[i][j]]-1>=cnt_vh[ve[i][j]]+1-cnt_izh[ve[i][j]]) {
                  printf("%d %d\n",i,ve[i][j]);
                  cnt[i]--;
                  cnt[ve[i][j]]--;
                  cnt_izh[i]++;
                  cnt_vh[ve[i][j]]++;
                  if (cnt[i]-cnt_izh[i]+cnt_vh[i]==odd[i]) make_vh(i);
                  if (cnt[ve[i][j]]-cnt_vh[ve[i][j]]+cnt_izh[ve[i][j]]==odd[ve[i][j]]) {int r=ve[i][j];ve[i][j]=0; make_izh(r);}
               }
               else if (cnt[i]-1>=cnt_vh[i]+1-cnt_izh[i] && cnt[ve[i][j]]-1>=cnt_izh[ve[i][j]]+1-cnt_vh[ve[i][j]]) {
                  printf("%d %d\n",ve[i][j],i);
                  cnt[i]--;
                  cnt[ve[i][j]]--;
                  cnt_vh[i]++;
                  cnt_izh[ve[i][j]]++;
                  if (cnt[i]-cnt_vh[i]+cnt_izh[i]==odd[i]) make_izh(i);
                  if (cnt[ve[i][j]]-cnt_izh[ve[i][j]]+cnt_vh[ve[i][j]]==odd[ve[i][j]]){int r=ve[i][j]; ve[i][j]=0; make_vh(r);}
               }
          }
     } 
          
}


int main() {
    init();
    solve();
return 0;
}
