#include <cstdio>
#include <cstring>
#define MAXN (1 << 10)
using namespace std;

int n, m;
int a[MAXN][MAXN];
int prev[MAXN];
int used[MAXN];

int dfs (int cur, int pred)
{
    //printf ("in dfs %d %d\n", cur, pred);
    if (used[cur] != 0) return 0;
    used[cur] = 1;

    for (int i=1; i <= n; ++i)
        if (a[cur][i])
            if (i != pred)
            {
                if (used[i] == 1)
                {
                    int c = cur;
                    printf ("%d %d\n", cur, i);
                    a[cur][i] = a[i][cur] = 0;

                    while (c != i)
                    {
                        printf ("%d %d\n", prev[c], c);
                        used[prev[c]] = 0;
                        a[c][prev[c]] = a[prev[c]][c] = 0;
                        c = prev[c];
                    }
                    //printf ("blah\n");
                    return 1;
                }
                if (used[i] == 0)
                {
                    prev[i] = cur;
                    if (dfs (i, cur))
                        return 1;
                    prev[i] = 0;
                }
                used[cur] = 1;
            }
    used[cur] = 2;
    return 0;
}

int used2[MAXN];
void dfs2 (int cur, int val)
{
    //printf ("in dfs2 %d %d\n", cur, val);
    used2[cur] = 1;

    int curval = val;
    for (int i=1; i <= n; ++i)
        if (a[cur][i])
            if (!used2[i])
            {
                if (curval == 0) printf ("%d %d\n", cur, i);
                else printf ("%d %d\n", i, cur);

                a[cur][i] = a[i][cur] = 0;
                dfs2 (i, !curval);
                curval = !curval;
            }
}

inline void solve ()
{
    printf ("Yes\n");
    // cycle cancelation
    while (1)
    {
        memset (used, 0, sizeof (used));
        memset (prev, 0, sizeof (prev));
        int t = 0;
        for (int i=1; i <= n; ++i)
            if (used[i] == 0)
            {
                prev[i] = i;
                t |= dfs (i, i);
                if (t) break;
                prev[i] = 0;
            }

        if (!t) break;
    }
    //printf ("out!\n");
    for (int i=1; i <= n; ++i)
        if (!used2[i])
            dfs2 (i, 0);
}

inline void read ()
{
    scanf ("%d%d", &n, &m);
    for (int i=0; i < m; ++i)
    {
        int from, to;
        scanf ("%d%d", &from, &to);
        a[from][to] = a[to][from] = 1;
    }
}

int main ()
{
    read ();
    solve ();
    return 0;
}
