#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int N = 2e5+5 ;
const int M = 4e5+5 ;
int n , m , vis[N] ;
vector<pair<int,int>> nei[N] ;
int GetMove(){
int ret ; cin >> ret ; return ret ;
}
void MakeMove(int v){
cout << v << endl ;
}
void dfs(int node , int par){
vis[node] = 1 ;
for(auto it:nei[node]){
if(vis[it.F] || it.F==par) continue ;
dfs(it.F,node) ;
}
}
int main(){
cin >> n >> m ;
for(int i=0 ; i<m ; i++){
int u , v ; cin >> u >> v ;
nei[u].push_back({v,i}) ; nei[v].push_back({u,i}) ;
}
for(auto it:nei[1]){
if(vis[it.F]) continue ;
vis[1] = 0 ;
dfs(it.F,1) ;
if(!vis[1]){
cout << "NO" << endl ;
return 0 ;
}
}
cout << "YES" << endl ;
while(true){
int temp = GetMove() , last = 1 ;
if(!temp) break ;
while(temp!=1){
for(auto it:nei[temp]){
if(it.F!=last){
MakeMove(it.F) , last = temp , temp = it.F ; break ;
}
}
}
}
return 0 ;
}