#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> a[1024];
int n,m,i,j,x,y,bits[32],in[1024],out[1024],v;
int edgesa[131072],edgesb[131072],par[1024];
bool fl,used[1024],reb[1024][1024];

void dfs(int u)
{
  int i,k,v;

  k=a[u].size();
  for(i=0;i<=k-1;i++)
  {
    v=a[u][i];
    if (v == par[u]) continue;

    if (used[v] && !reb[u][v] && !reb[v][u])
    {
      out[u]++;
      in[v]++;
      reb[u][v]=true;
      dfs(v);
    }
    else
    if (!used[v])
    {
      used[v]=true;
      par[v]=u;
      out[u]++;
      in[v]++;
      reb[u][v]=true;
      dfs(v);
    }
  }

}
int main()
{
  scanf("%d%d",& n,& m);
  for(i=1;i<=m;i++)
  {
    scanf("%d%d",& x,& y);
    a[x].push_back(y);
    a[y].push_back(x);
    edgesa[i]=x;
    edgesb[i]=y;
  }

  if (m <= 20)
  {
    int h=1<<m;
    for(i=1;i<=h;i++)
    {
      x=i;
      v=0;
      while(x!=0)
      {
        v++;
        bits[v]=x%2;
        x>>=1;
      }
      memset(out,0,(n+2)*sizeof(int));
      memset(in,0,(n+2)*sizeof(int));
      for(j=1;j<=m;j++)
      {
        if (bits[j])
        {
          out[edgesa[j]]++;
          in[edgesb[j]]++;
        }
        else
        {
          out[edgesb[j]]++;
          in[edgesa[j]]++;
        }
      }
      fl=true;
      for(j=1;j<=n;j++)
       if (abs(in[j]-out[j]) > 1) { fl=false;break;}

      if (fl)
      {
        printf("Yes\n");
        for(j=1;j<=m;j++)
         if (bits[j]) printf("%d %d\n", edgesa[j], edgesb[j]);
         else printf("%d %d\n", edgesb[j],edgesa[j]);
        break;
      }

    }
    if (i>=h+1) printf("No\n");
  }
  else
  {
    used[1]=true;
    dfs(1);
    fl=true;
    for(i=1;i<=n;i++)
     if (abs(in[i]-out[i])>1) { fl=false;break;}

    if (fl)
    {
      printf("Yes\n");
      for(j=1;j<=m;j++)
       if (reb[edgesa[j]][edgesb[j]]) printf("%d %d\n", edgesa[j], edgesb[j]);
       else printf("%d %d\n", edgesb[j], edgesa[j]);
    }
    else printf("No\n");
  }
return 0;
}
