#include <cstdio>
#include <vector>
#include <utility>
#include <cstring>
#include <stack>

using namespace std;

vector < pair < int, int > > ans;
vector < int > v[1 << 10];
char a[1024][1024], degree[1024];
int used[1024], N, M;
char mat[1024][1024];
stack <int> tmp, cycle;
int mark[ 1024 ];

void scan(){
    int x, y;

    scanf ( "%d%d", &N, &M );

    for ( int i = 0; i < M; ++i ){
        scanf ( "%d%d", &x, &y );
        v[x].push_back(y);
        v[y].push_back(x);
        mat[x][y] = mat[y][x] = 1;
    }

}

bool dfs ( int i ){

    if ( degree[i] ){ degree[i] ^= 1; return 1; }

    used[i] = 1;

    for ( int j = 0; j < v[i].size(); ++j )
        if ( !a[i][ v[i][j] ] && !used[ v[i][j] ]){
            bool tmp = dfs ( v[i][j] );
            if ( tmp ) {
                ans.push_back ( make_pair ( i, v[i][j] ) );
                a[i][ v[i][j] ] = a[ v[i][j] ][i] = 1;
                return 1;
            }
        }

    return 0;
}

void euler(int i){
    tmp.push ( i );

    while ( ! tmp.empty() ){
        i = tmp.top();
        int br = 0;

        for ( int j = 1; j <= N; ++j )
            if ( mat[i][j] ){
                mat[i][j] = mat[j][i] = 0;
                ++br;
                tmp.push ( j );
                break;
            }

        if ( !br ) { cycle.push ( tmp.top() ); tmp.pop(); }
    }

    while ( !cycle.empty() ){
        mark[ cycle.top() ] = 1;
        int x = cycle.top();
        cycle.pop();
        if ( !cycle.empty() ) ans.push_back ( make_pair ( x, cycle.top() ) );
    }
}
void solve(){
    for ( int i = 1; i <= N; ++i )
        degree[i] =  ( (int)v[i].size() ) % 2;

    for ( int i = 1; i <= N; ++i )
        if ( degree[i] ){
            degree[i] ^= 1;
            used[i] = 1;
            dfs ( i );
            //printf ( "\n" );
            memset ( used, 0, sizeof ( used ) );
        }
    /*
    for ( int i = 1; i <= N; ++i ){
        for ( int j = 1; j <= N; ++j )
            printf ( "%d ", (int)a[i][j] );

        printf ( "\n" );
    }*/

    for ( int i = 1; i <= N; ++i )
        for ( int j = 1; j <= N; ++j )
            mat[i][j] ^= a[i][j];

    for ( int i = 1; i <= N; ++i )
        if ( !mark[i] ) euler(i);

    if ( ans.size() != M ) printf ( "No\n" );
    else{
        printf ( "Yes\n" );
        for ( int i = 0; i < ans.size(); ++i )
            printf ( "%d %d\n", ans[i].first, ans[i].second );
    }
}
int main(){
    scan();
    solve();
}
