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


const int MAXN = 1 << 10;

vector < int > g[MAXN];
int ans[MAXN][MAXN];
int ma3x[MAXN][MAXN] , in[MAXN] , out[MAXN] , N , M;
bool u[MAXN];

inline int abs ( int a ) {
        return a < 0 ? -a : a;
}

void go ( int v ) {
        for (int i = 0; i < g[v].size(); ++i)
                if ( (ma3x[v][ g[v][i] ] || ma3x[ g[v][i] ][v] ) ) {
                        if ( in[v] >= out[v] ) {
                                ++ans[v][ g[v][i] ];
                                ++out[v];
                                ++in[ g[v][i] ];
                        }
                        else {
                                ++ans[ g[v][i] ][v];
                                ++in[v];
                                ++out[ g[v][i] ];
                        }
                        --ma3x[v][ g[v][i] ];
                        --ma3x[ g[v][i] ][v];
                        go ( g[v][i] );
                }
}


int main() {
        //freopen ( "in.txt" , "r" , stdin );
        scanf ( "%d%d" , &N , &M );

        int a , b;
        int i , j;
        for (i = 0; i < M; ++i) {
                scanf ( "%d%d" , &a , &b );
                --a , --b;
                g[a].push_back ( b );
                g[b].push_back ( a );
                ma3x[a][b] = ma3x[b][a] = 1;
        }
        for (i = 0; i < N; ++i)
                if ( !u[i] )
                        go ( i );

        for (i = 0; i < N; ++i)
                if ( abs ( in[i] - out[i] ) > 1 ) {
                        puts ( "No" );
                        return 0;
                }

        puts ( "Yes" );
        for (i = 0; i < N; ++i)
                for (j = 0; j < N; ++j)
                        if ( ans[i][j] )
                                printf ( "%d %d\n" , i + 1 , j + 1 );

        return 0;
}
