#include <cmath>
#include <cstdio>
#include <cstring>
#include <utility>

#define x first
#define y second

using namespace std;

int N, M, v[1024];
pair < int, int > p[100000];

inline bool check ( int mask ) {

	memset ( v, 0, sizeof v );
	for ( int i=0; i<M; ++i )
		if ( ( mask & ( 1 << i ) ) ) {
			++ v[ p[i].y ];
			-- v[ p[i].x ];
			}
		else {
			-- v[ p[i].y ];
			++ v[ p[i].x ];
			}

	for ( int i=0; i<1024; ++i ) if ( v[i] < -1 || v[i] > 1 ) return false;
	return true;
	
}

int main (void) {

	scanf ( "%d%d", &N, &M );
	for ( int i=0; i<M; ++i ) scanf ( "%d%d", &p[i].x, &p[i].y );

	if ( M < 28 ) {

		bool key = false;
		int m;
		for ( m=0; m<(1<<M); ++m ) {
			key |= check ( m );
			if ( key ) break;
			}

		if ( key ) {
			printf ( "Yes\n" );
			for ( int i=0; i<M; ++i ) {
				if ( ( m & ( 1 << i ) ) ) printf ( "%d %d\n", p[i].y, p[i].x );
				else printf ( "%d %d\n", p[i].x, p[i].y );
				}
			}
		
		}
	else printf ( "No\n" );
	
}
