#include<iostream>
#include<algorithm>
#include<map>
#include<cstdio>
#include<vector>
#include<queue>
#include<string>
#include<set>
//#include<cmath>

using namespace std;
#define wait system("pause")
#define pb push_back
#define PII pair<int,int>
#define mp make_pair
#define LOW_BIT(x) (x&(-x))
int n,m,x,y,maxn;
bool used[1024][1024];
vector<int> a[1024];
vector<int> vliza[1024];
vector<int> izliza[1024];
PII rebra[1024];

void bf()
{
    int all=1<<m;
   bool endall=false;
    for(int i=0;i<=all && endall==false;i++)
    { vector<int> b[1024];
    int vliza[128],izliza[128];
    memset(vliza,0,(n+1)*4);
     memset(izliza,0,(n+1)*4);
    // vij posle memset!
     // for(int t=1;t<=n;t++) {vliza[t]=0; izliza[t]=0;}
        int i1=i;
        for(int j=1;j<=m;j++)
        {
            int x1=rebra[j].first;  int y1=rebra[j].second;
            if(i1&1)  {b[x1].pb(y1);  vliza[y1]++; izliza[x1]++;}
             else   { b[y1].pb(x1);    vliza[x1]++; izliza[y1]++;}
             i1>>=1;

        }
        bool  ok=false;
        for(int c=1;c<=n;c++)
         { if(vliza[c]-izliza[c]==-1 || vliza[c]-izliza[c]==1 || vliza[c]-izliza[c]==0){}  else { ok=true;  break;}}
         if(!ok)
          {  printf("YES\n");
             endall=true;
              for(int u=1;u<=n;u++)
              { int g=b[u].size();  for(int p=0;p<g;p++) printf("%d %d\n",u,b[u][p]); }
              }

    }
    if(endall==false) printf("NO\n");

}

int main()
{

   // int test[16]; memset(test,0,15*4); for(int i=0;i<=15;i++) cout<<test[i]<<" "; wait;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
    scanf("%d%d",&x,&y);
    a[x].pb(y);
    a[y].pb(x);
    rebra[i]=mp(x,y);

    }

    bf();
// 0- vzimame rebroto v posoka  a -> b
// 1- vzimame rebroto v posoka b -> a
return 0;
}
