#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>

using namespace std;

struct rib
{
    int x,y;
};

int orientation[1024][1024],p,t[1024][1024],used[1024],path[1024],uk[1024];
rib s[10006];
vector <int> a[1024];

void dfs2(int i,int w)
{
    used[i] = 1;
    int br=0,z=0,j,vhod,izhod;
    for ( j=0; j<a[i].size(); j++ )
        if ( !used[ a[i][j] ] && t[i][ a[i][j] ] ) br++;
    if ( w == 0 ) { vhod = br/2; izhod = br - vhod; }
    if ( w == 1 ) { vhod = (br+1)/2; izhod = br - vhod; }
    if ( w == -1 ) { vhod = (br+1)/2 + (br+1)%2; izhod = br - vhod; }

    for ( j=0; z<vhod; j++ )
    if ( !used[ a[i][j] ] && t[i][ a[i][j] ] )
    {
        z++;
        orientation [i] [a[i][j]] = 2; orientation [a[i][j]] [i] = 1;
        dfs2(a[i][j],-1);
    }

    for ( ; j<a[i].size(); j++ )
    if ( !used[ a[i][j] ] && t[i][ a[i][j] ] )
    {
        orientation [i] [a[i][j]] = 1; orientation [a[i][j]] [i] = 2;
        dfs2(a[i][j],1);
    }
}

void dfs(int i)
{
    used[i]=1;
    path[0]++; path[path[0]] = i; uk[i] = path[0];
    int j,k;
    for ( j=0; j<a[i].size(); j++ )
    {
        if ( !t[i][ a[i][j] ] ) continue;
        if ( !used[ a[i][j] ] ) dfs ( a[i][j] );
        else if ( uk[ a[i][j] ] != -1 && a[i][j] != path[path[0]-1] )
        {
            t[i][ a[i][j] ] = t[ a[i][j] ][i] = 0;
            orientation [ i ][ a[i][j] ] = 1; orientation [ a[i][j] ][ i ] = 2;
            for ( k=uk[ a[i][j] ]; k<path[0]; k++ )
            {
                t[ path[k] ][ path[k+1] ] = t[ path[k+1] ][ path[k] ] = 0;
                orientation [ path[k] ][ path[k+1] ] = 1; orientation [ path[k+1] ][ path[k] ] = 2;
            }
            p = 1;
        }
        if (p) return;
    }
    path[0]--;
}

int main()
{
    int i,j,n,m,u=1;
    rib g;
    scanf ("%d%d",&n,&m);
    for ( i=1; i<=m; i++ )
    {
        scanf ("%d%d",&s[i].x,&s[i].y);
        a[s[i].x].push_back( s[i].y );
        a[s[i].y].push_back( s[i].x );
        t[s[i].x][s[i].y] = t[s[i].y][s[i].x] = 1;
    }

    while (u)
    {
        for ( j=1; j<=n; j++ ) used[j] = 0; u = 0;
        for ( i=1; i<=n; i++ )
        {
            if ( !used[i] )
            {
                p=0; path[0]=0; for ( j=1; j<=n; j++ ) uk[j] = -1;
                dfs(i);
                if (p) u = 1;
            }
        }
    }

    for ( j=1; j<=n; j++ ) used[j] = 0;

    for ( i=1; i<=n; i++ )
        if ( !used[i] ) dfs2(i,0);

    printf("Yes\n");
    for ( i=1; i<=m; i++ )
    {
        if ( orientation [ s[i].x ][ s[i].y ] == 1 ) printf ("%d %d\n",s[i].x,s[i].y);
        else printf ("%d %d\n",s[i].y,s[i].x);
    }
}
