#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;

int n,m,b1[100100],b2[100100],prev[1010],ot[1010],shit[1010];
int d[1010][1010],ans[1010][1010],used[1010],passed[1010];
vector<int> v[1010];

int check(int x,int gx)
{
    if(ans[x][prev[x]]||ans[prev[x]][x])return 1;
    if(prev[x]==gx)return 0;
    if(check(prev[x],gx))return 1;
    return 0;
}

void mark(int x,int gx)
{
    ans[x][prev[x]]=1;
    if(prev[x]==gx)return;
    mark(prev[x],gx);
}

void dfs(int k,int p)
{
    int i,bla;
    if(passed[k]){if(check(k,k)==0)mark(k,k);}
    passed[k]++;
    for(i=0;i<v[k].size();i++)
    {
        if(d[k][v[k][i]]==0&&d[v[k][i]][k]==0)
        {
            d[k][v[k][i]]=1;
            bla=prev[v[k][i]];
            prev[v[k][i]]=k;
            dfs(v[k][i],k);
            prev[v[k][i]]=bla;
        }
    }
    passed[k]--;
    used[k]=1;
}

void dfs2(int k)
{
    int i;
    ot[k]--;
    for(i=0;i<v[k].size();i++)
     if(ans[k][v[k][i]]==0&&ans[v[k][i]][k]==0)
     {
            ot[k]--;
            ans[k][v[k][i]]=1;
            dfs2(v[k][i]);
            return;
     }
}

int main()
{
    int i,j;
    scanf("%d%d",&n,&m);
    for(i=0;i<m;i++)
    {
        scanf("%d%d",&b1[i],&b2[i]);
        v[b1[i]].push_back(b2[i]);
        v[b2[i]].push_back(b1[i]);
    }
    for(i=1;i<=n;i++)
     if(used[i]==0)dfs(i,0);
    for(i=1;i<=n;i++)
     for(j=0;j<v[i].size();j++)
      if(ans[v[i][j]][i]==0&&ans[i][v[i][j]]==0)ot[i]++;
    for(i=1;i<=n;i++)
     if(ot[i]==1)dfs2(i);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<v[i].size();j++)
         if(ans[i][v[i][j]]){shit[i]++;shit[v[i][j]]--;}
    }
    for(i=1;i<=n;i++)
     if(shit[i]>1||shit[i]<-1){printf("No\n");return 0;}
    printf("Yes\n");
    for(i=0;i<m;i++)
    {
        if(ans[b1[i]][b2[i]])printf("%d %d\n",b1[i],b2[i]);
        else if(ans[b2[i]][b1[i]])printf("%d %d\n",b2[i],b1[i]);
    }
}
