#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int n,m;
vector<int> a[1024];
int in[1024]={0},out[1024]={0};
int matr[1024][1024]={0};
int edg[100006][2];
void greedy(){
    for(int i=0;i<m;i++){
            scanf("%d %d",&edg[i][0],&edg[i][1]);
            a[edg[i][0]].push_back(edg[i][1]);
            a[edg[i][1]].push_back(edg[i][0]);
            }
    for(int i=1;i<=n;i++){//cout << i << endl;
            int k=a[i].size()/2;
            if(a[i].size()%2==1 && in[i]<=k) k++;
            k-=out[i];
            //cout << "out " << out[i] << endl;
            //cout << 'k' << k << endl;
            int br=0,j;
            for(j=0;j<a[i].size() && br<k;j++)if(a[i][j]>i){
                    int u=a[i][j],s=a[u].size();
                    if(in[u]<s/2 || (s%2==1 && in[u]==s/2)){
                                 in[u]++;
                                 br++;
                                 matr[i][u]=1;
                                 //cout << u << "; ";
                                 }
                    else{
                         out[u]++;
                         if((out[u]>s/2 && s%2==0) || (out[u]>(s/2+1) && s%2==1)){
                                        printf("No\n");
                                        return;
                                        }
                         matr[u][i]=1;
                         }
                    }
            for(int r=j;r<a[i].size();r++){
                    int u=a[i][r],s=a[u].size();
                    out[u]++;
                    if((out[u]>s/2 && s%2==0) || (out[u]>(s/2+1) && s%2==1)){
                                        printf("No\n");
                                        return;
                                        }
                    matr[u][i]=1;
                    }
            if(br<k){
                     printf("No\n");
                     return;
                     }
            //cout << endl;
            }
    printf("Yes\n");
    for(int i=0;i<m;i++)
    if(matr[edg[i][0]][edg[i][1]]==1) printf("%d %d\n",edg[i][0],edg[i][1]);
    else printf("%d %d\n",edg[i][1],edg[i][0]);
}

void brute_force(){
     for(int i=0;i<m;i++){
            scanf("%d %d",&edg[i][0],&edg[i][1]);
            a[edg[i][0]].push_back(edg[i][1]);
            a[edg[i][1]].push_back(edg[i][0]);
            }
     int v[32]={0};
     int br=(1<<m)-1;
     for(int i=0;i<br;i++){
             //for(int j=0;j<m;j++) cout << v[j];cout << endl;
             int stat[32]={0};
             for(int j=0;j<m;j++) if(v[j]==0){
                     stat[edg[j][0]]++;
                     stat[edg[j][1]]--;
                     }
                     else{
                          stat[edg[j][0]]--;
                          stat[edg[j][1]]++;
                          }
             bool b=true;
             for(int j=1;j<=n;j++) if(stat[j]*stat[j]>1) b=false;
             if(b==true){
                   printf("Yes\n");
                   for(int j=0;j<m;j++)
                   if(v[j]==0) printf("%d %d\n",edg[j][0],edg[j][1]);
                   else printf("%d %d\n",edg[j][1],edg[j][0]);
                   return;
                   }
             int p=m-1;
             while(v[p]==1) p--;
             v[p]=1;
             for(int j=p+1;j<m;j++) v[j]=0;
             }
     printf("No\n");
     }

int main(){
    scanf("%d %d",&n,&m);
    if(m>21) greedy();
    else brute_force();
    return 0;
}
