#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
struct edge 
{
       int x,y;
};
queue<int> q;
edge u[10000];
int a[100][100];
int n,m;
void read ()
{
        cin>>n;
        cin>>m;
        int i;
        for(i=0;i<m;i++)
        {
             cin>>u[i].x>>u[i].y;               
        } 
}
void print ()
{
     cout<<"Yes"<<endl;
     int i,j;
     for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
     if(a[i][j]==1)cout<<i<<' '<<j<<endl;
}
int sink=50,target=51;
int used[1000];
int d[1000];
int bfs ()
{
    for(int i=1;i<=target;i++)d[i]=-1;
    d[target]=0;
    q.push(target);
    int k;
    while(!q.empty())
    {
          k=q.front();
          q.pop();
          for(int i=1;i<=target;i++)
          {
                                if(a[i][k]>0&&d[i]==-1)
                                {
                                                       d[i]=d[k]+1;
                                                       q.push(i);
                                }
          }           
    }
    return d[sink];
}
int dfs (int node , int flow) 
{
    if(node==target)return flow;
    int i;
    for(i=1;i<=target;i++)
    {
                          if(a[node][i]>0&&used[i]==0&&d[i]<d[node])
                          {
                              int x=dfs(i,min(flow,a[node][i]));
                              if(x!=-1)
                              {
                                       a[node][i]-=x;
                                       a[i][node]+=x;
                                       return x;
                              }
                          }
    }
    used[node]=1;
    return -1;
}
int diniz ()
{
    int maxflow=0,flow;
    while(bfs()!=-1)
    {
                    memset(used,0,sizeof(used));
                    while(1)
                    {
                            flow=dfs(sink,1000);
                            if(flow==-1)break;
                            else maxflow+=flow;
                    }
    }
    return maxflow;
}
void solve ()
{
     int i,t,j;
     t=(1<<m);
     if(m>30){cout<<"No"<<endl;return;}
     for(i=0;i<t;i++)
     {
                     memset(a,0,sizeof(a));
                     for(j=0;j<m;j++)
                     {
                                     if((1&(i>>j))==1) {a[sink][u[j].y]=1002;a[u[j].y][u[j].x]=1;a[u[j].x][target]=1;}
                                     else {a[sink][u[j].x]=1002;a[u[j].x][u[j].y]=1;a[u[j].y][target]=1;}
                     }
                     int ww=diniz();
                     if(ww==n){print();return;}
     }
     cout<<"No"<<endl;
}
int main ()
{
    read ();
    solve ();
}
