#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;

struct rib
{ int x; int y; };

int root,n,m,out[1024][1024],balance[1024],st;
vector<int> a[1024];
vector<rib> w;
bool marked[1024],used[1024],used2[1024],cycle[1024],big,small;
rib rb[100010];


void dfs(int e,int parent)
{
    used[e]=1;
    used2[e]=1;
    int i;
   // printf("now in %d\n",e);
    for(i=0;i<a[e].size();i++)
    {
        //if(e==5) printf("%d -a[e][i]\n",a[e][i]);
        if(a[e][i]==parent) continue;
        if(out[e][a[e][i]]!=0) continue;

        if(marked[a[e][i]]||(used[a[e][i]]&&!used2[a[e][i]]))
        {
            rib r;
            r.x=e;
            r.y=a[e][i];
            w.push_back(r);
            //printf("%d %d in w marked: %d used2: %d\n",e,a[e][i],marked[a[e][i]],used2[a[e][i]]);
            continue;
        }
        if(used2[a[e][i]]&&out[e][a[e][i]]==0)
        {
            if(a[e][i]==root)
            {
                big=1;
                out[e][root]=1;
                out[root][e]=-1;
                //printf("1. %d++ %d-- small:%d\n",root,e,small);
                balance[root]++;
                balance[e]--;
                //if(e==1) printf("HERE!\n");
                used2[e]=0;
                cycle[e]=1;
                return;
            }

            small=1;
            st=a[e][i];
            out[e][a[e][i]]=1;
            out[a[e][i]][e]=-1;
            //printf("2. %d++ %d-- small:%d\n",a[e][i],e,small);
            balance[a[e][i]]++;
            balance[e]--;
            cycle[e]=1;
            //if(e==1) printf("HERE!\n");
            used2[e]=0;
            return;
        }
        else if(used[a[e][i]]) continue;

           // printf("going to %d\n",a[e][i]);
        dfs(a[e][i],e);
          //  printf("now in %d\n",e);

        if(big)
        {
            if(balance[a[e][i]]>0)
            {
                balance[a[e][i]]--;
                out[e][a[e][i]]=-1;
                out[a[e][i]][e]=1;
                balance[e]++;
                cycle[e]=1;
                //printf("3. %d++ %d-- small:%d\n",e,a[e][i],small);
                if(root!=e) {  used2[e]=0; return; }
                big=0;
            }
            balance[a[e][i]]++;
            out[e][a[e][i]]=1;
            out[a[e][i]][e]=-1;
            balance[e]--;
            cycle[e]=1;
            //printf("4. %d++ %d-- small:%d\n",a[e][i],e,small);
            if(root!=e) { used2[e]=0; return; }
                big=0;
        }
        if(small)
        {
            if(balance[a[e][i]]>0)
            {
                balance[a[e][i]]--;
                out[e][a[e][i]]=-1;
                out[a[e][i]][e]=1;
                balance[e]++;
                cycle[e]=1;
                //printf("5. %d++ %d-- small:%d\n",a[e][i],e,small);

                if(st!=e){  used2[e]=0; return; }
                small=0; st=0;
            }
                balance[a[e][i]]++;
                out[e][a[e][i]]=1;
                out[a[e][i]][e]=-1;
                balance[e]--;
                cycle[e]=1;
                //printf("6. %d++ %d-- small:%d\n",a[e][i],e,small);

                if(st!=e) {  used2[e]=0; return; }
                small=0; st=0;
        }

    }
    //if(e==1) printf("HERE!\n");
    used2[e]=0;
    return;
}

void bfs(int e)
{
    queue<int> q;
    int i;
    used[e]=1;
    q.push(e);
    while(!q.empty())
    {
        int f=q.front();
        q.pop();
        for(i=0;i<a[f].size();i++)
        {
            if(out[f][a[f][i]]!=0) continue;
            if(balance[a[f][i]]>0||balance[f]<0)
            {
                balance[a[f][i]]--;
                out[f][a[f][i]]=-1;
                out[a[f][i]][f]=1;
                balance[f]++;
                if(!cycle[a[f][i]]&&!used[a[f][i]]) { used[a[f][i]]=1; q.push(a[f][i]); }
                continue;
            }
            if(balance[a[f][i]]<0||balance[f]>0)
            {
                balance[a[f][i]]++;
                out[f][a[f][i]]=1;
                out[a[f][i]][f]=-1;
                balance[f]--;
                if(!cycle[a[f][i]]&&!used[a[f][i]]) { used[a[f][i]]=1; q.push(a[f][i]); }
                continue;
            }
            balance[a[f][i]]++;
            out[f][a[f][i]]=1;
            out[a[f][i]][f]=-1;
            balance[f]--;
            if(!cycle[a[f][i]]&&!used[a[f][i]]) { used[a[f][i]]=1; q.push(a[f][i]); }
        }
    }
}


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

    for(i=1;i<=n;i++)
    {
        if(used[i]||marked[i]) continue;
        root=i;
        //printf("-- %d --\n",i);
        dfs(i,-1);
        for(j=1;j<=n;j++) marked[j]=used[j];
        st=0;
        small=0;
        big=0;
    }
    memset(used,0,sizeof(used));
    for(i=1;i<=n;i++)
    {
        if(cycle[i]) continue;
        bfs(i);
    }

    for(i=0;i<w.size();i++)
    {
        x=w[i].x;
        y=w[i].y;
        if(out[x][y]!=0) continue;
        if(balance[x]<0||balance[y]>0)
        {
            balance[x]++;
            balance[y]--;
            out[x][y]=-1;
            out[y][x]=1;
        }
        balance[x]--;
        balance[y]++;
        out[x][y]=1;
        out[y][x]=-1;
    }

    for(i=0;i<m;i++)
    {
        if(out[rb[i].x][rb[i].y]==0)
        {
            x=rb[i].x;
            y=rb[i].y;
            if(out[x][y]!=0) continue;
            if(balance[x]<0||balance[y]>0)
            {
                balance[x]++;
                balance[y]--;
                out[x][y]=-1;
                out[y][x]=1;
            }
            balance[x]--;
            balance[y]++;
            out[x][y]=1;
            out[y][x]=-1;
        }
    }
printf("Yes\n");
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if(out[i][j]==1)
            {
                printf("%d %d\n",i,j);
                out[i][j]=0;
                out[j][i]=0;
            }
            if(out[i][j]==-1)
            {
                printf("%d %d\n",j,i);
                out[i][j]=0;
                out[j][i]=0;
            }
        }

    return 0;
}
