#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<int, int>
#define F first
#define S second
const int maxn =5e5+10;
const int mod=1e9+7;
int n, m;
int dp[20][100000];
vector<pii> v[maxn];
int dfs(int x, int mask){
if(dp[x][mask] != -1) return dp[x][mask];
bool b=0;
if(x==1){
for(auto[y, id]: v[x]){
if( ((1<<id) & mask) == 0){
if( dfs(y, ((1<<id) | mask) ) == 1) b=1;
}
}
}else{
b=1;
for(auto[y, id]: v[x]){
if( ((1<<id) & mask) == 0){
if( dfs(y, ((1<<id) | mask) ) == 0) b=0;
}
}
}
dp[x][mask]=b;
return b;
}
int GetMove(){
int ret; cin>>ret;
return ret;
}
void MakeMove(int v){
cout << v << endl;
}
signed main(){
//ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m;
for(int i=0; i<m; i++){
int x, y; cin>>x>>y;
v[x].push_back( {y, i} );
v[y].push_back( {x, i} );
}
memset(dp, -1, sizeof(dp));
if (dfs(1, 0) == 1) {
cout << "NO" << endl;
return 0;
}
cout << "YES" << endl;
int cur=1, mask=0;
while(true){
int a=GetMove();
if(a==0){
return 0;
}
for(auto[y, id] : v[1]){
if(y==a){
mask |= (1<<id);
break;
}
}
cur=a;
for(auto[y, id]: v[cur]){
if( ((1<<id) & mask) == 0)
if( dfs(y, ((1<<id) | mask) ) == 0){
cur=y; mask = ((1<<id) | mask);
break;
}
}
MakeMove(cur);
while(cur!=1){
for(auto[y, id]: v[cur]){
if( ((1<<id) & mask) == 0)
if( dfs(y, ((1<<id) | mask) ) == 0){
cur=y; mask = ((1<<id) | mask);
break;
}
}
MakeMove(cur);
}
}
// cout << "NO" << endl;
return 0;
}