#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int MAXN = 100000;
multiset<int> g[MAXN+1];
typedef pair<int,int> pii;
bool vis[MAXN+1];
void dfs(int v)
{
vis[v] = true;
for(auto it = g[v].begin();it != g[v].end();++it)
{
if(!vis[*it])
{
dfs(*it);
}
}
}
stack<int> cycle;
void euler_dfs(int v)
{
stack<int> nodes;
int location = v;
//nodes.push(location);
do
{
if(!g[location].empty())
{
int v = *g[location].begin();
g[location].erase(g[location].begin());
g[v].erase(g[v].find(location));
nodes.push(location);
location = v;
}else{
while(g[location].empty())
{
cycle.push(location);
if(nodes.empty())
break;
location = nodes.top();
nodes.pop();
}
}
}while(!nodes.empty());
while(!cycle.empty())
{
int tp = cycle.top();
cycle.pop();
if(!cycle.empty())
{
cout << tp << ' ' << cycle.top() << '\n';
}
}
}
int main()
{
int N,M;
cin >> N >> M;
for(int i = 0;i < M;++i)
{
int x,y;
cin >> x >> y;
g[x].insert(y);
g[y].insert(x);
}
//check all have even degrees
for(int i = 1;i <= N;++i)
{
if(g[i].size()%2 != 0 || g[i].size() == 0)
{
cout << "NO\n";
return 0;
}
}
//check for connected : dfs and all are visited #Simple
dfs(1);
for(int i = 1;i <= N;++i)
{
if(!vis[i])
{
cout << "NO\n";
return 0;
}
}
//print the eulerian circuit
cout << "YES\n";
euler_dfs(1);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVhOID0gMTAwMDAwOwptdWx0aXNldDxpbnQ+IGdbTUFYTisxXTsKdHlwZWRlZiBwYWlyPGludCxpbnQ+IHBpaTsKYm9vbCB2aXNbTUFYTisxXTsKIAp2b2lkIGRmcyhpbnQgdikKewoJdmlzW3ZdID0gdHJ1ZTsKCWZvcihhdXRvIGl0ID0gZ1t2XS5iZWdpbigpO2l0ICE9IGdbdl0uZW5kKCk7KytpdCkKCXsKCQlpZighdmlzWyppdF0pCgkJewoJCQlkZnMoKml0KTsKCQl9Cgl9Cn0Kc3RhY2s8aW50PiBjeWNsZTsKdm9pZCBldWxlcl9kZnMoaW50IHYpCnsKCXN0YWNrPGludD4gbm9kZXM7CglpbnQgbG9jYXRpb24gPSB2OwoJLy9ub2Rlcy5wdXNoKGxvY2F0aW9uKTsKCWRvCgl7CgkJaWYoIWdbbG9jYXRpb25dLmVtcHR5KCkpCgkJewoJCQlpbnQgdiA9ICpnW2xvY2F0aW9uXS5iZWdpbigpOwoJCQlnW2xvY2F0aW9uXS5lcmFzZShnW2xvY2F0aW9uXS5iZWdpbigpKTsKCQkJZ1t2XS5lcmFzZShnW3ZdLmZpbmQobG9jYXRpb24pKTsKCQkJbm9kZXMucHVzaChsb2NhdGlvbik7CgkJCWxvY2F0aW9uID0gdjsKCQl9ZWxzZXsKCQkJd2hpbGUoZ1tsb2NhdGlvbl0uZW1wdHkoKSkKCQkJewoJCQkJY3ljbGUucHVzaChsb2NhdGlvbik7CgkJCQlpZihub2Rlcy5lbXB0eSgpKQoJCQkJCWJyZWFrOwoJCQkJbG9jYXRpb24gPSBub2Rlcy50b3AoKTsKCQkJCW5vZGVzLnBvcCgpOwoJCQl9CgkJfQkKCX13aGlsZSghbm9kZXMuZW1wdHkoKSk7CgoJd2hpbGUoIWN5Y2xlLmVtcHR5KCkpCgl7CgkJaW50IHRwID0gY3ljbGUudG9wKCk7CgkJY3ljbGUucG9wKCk7CgkJaWYoIWN5Y2xlLmVtcHR5KCkpCgkJewoJCQljb3V0IDw8IHRwIDw8ICcgJyA8PCBjeWNsZS50b3AoKSA8PCAnXG4nOwoJCX0KCX0KCQp9CiAKaW50IG1haW4oKQp7CglpbnQgTixNOwoJY2luID4+IE4gPj4gTTsKCWZvcihpbnQgaSA9IDA7aSA8IE07KytpKQoJewoJCWludCB4LHk7CgkJY2luID4+IHggPj4geTsKCQlnW3hdLmluc2VydCh5KTsKCQlnW3ldLmluc2VydCh4KTsKCX0KCS8vY2hlY2sgYWxsIGhhdmUgZXZlbiBkZWdyZWVzCglmb3IoaW50IGkgPSAxO2kgPD0gTjsrK2kpCgl7CgkJaWYoZ1tpXS5zaXplKCklMiAhPSAwIHx8IGdbaV0uc2l6ZSgpID09IDApCgkJewoJCQljb3V0IDw8ICJOT1xuIjsKCQkJcmV0dXJuIDA7CgkJfQoJfQogCgkvL2NoZWNrIGZvciBjb25uZWN0ZWQgOiBkZnMgYW5kIGFsbCBhcmUgdmlzaXRlZCAjU2ltcGxlCiAKCWRmcygxKTsKCWZvcihpbnQgaSA9IDE7aSA8PSBOOysraSkKCXsKCQlpZighdmlzW2ldKQoJCXsKCQkJY291dCA8PCAiTk9cbiI7CgkJCXJldHVybiAwOwoJCX0KCX0KCS8vcHJpbnQgdGhlIGV1bGVyaWFuIGNpcmN1aXQKCWNvdXQgPDwgIllFU1xuIjsKCWV1bGVyX2RmcygxKTsKIAoJcmV0dXJuIDA7Cn0K