/*
codr: timiter
task: like
lang: C++
*/

#include <cstdio>

using namespace std;

int n, m, e = 0, d = 0;
int b[1024], p1[131072], p2[131072], h[1024];
bool u[1024];
bool a[1024][1024];

void down(int, int, bool);

int main()
{
    int i, j, p;
    for (i = 1; i <= 1020; i++)
    {
        for (j = 1; j <= 1020; j++)
        {
            a[i][j] = false;
        }
        b[i] = 0;
        u[i] = false;
    }

    scanf("%d %d", &n, &m);
    for (i = 0; i < m; i++)
    {
        scanf("%d %d", &j, &p);
        p1[e] = j;
        p2[e] = p;
        e++;
        a[j][p] = a[p][j] = true;
        b[j]++;
        b[p]++;
    }
    for (i = 1; i <= n; i++)
    {
        if (b[i] % 2 == 1)
        {
            h[d++] = i;
        }
    }

    if (d == 0)
    {
        for (i = 1; i <= n; i++)
        {
            down(i, 0, false);
        }
    }
    else
    {
        for (i = 0; i < d; i++)
        {
            down(h[i], 0, false);
        }
    }

    printf("Yes\n");
    for (i = 0; i < e; i++)
    {
        if (a[p1[i]][p2[i]])
        {
            printf("%d %d\n", p1[i], p2[i]);
        }
        else
        {
            printf("%d %d\n", p2[i], p1[i]);
        }
    }

    return 0;
}

void down(int x, int y, bool z)
{
    int i;
    bool f = z;

    for (i = 1; i <= n; i++)
    {
        if (a[x][i] && a[i][x] && i != y)
        {
            if (f)
            {
                a[x][i] = false;
            }
            else
            {
                a[i][x] = false;
            }
            down(i, x, f);
            f = !f;
        }
    }
}
