//#define _GLIBCXX_DEBUG
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,avx")
#include<bits/stdc++.h>
//#define int long long
#define endl '\n'
#define fast ios_base::sync_with_stdio(false);cout.tie(nullptr);cin.tie(nullptr);
using namespace std;
vector<int> g[100001];
int n;
vector<int> p;
//map<pair<int,int>,bool>memo;
//bool is_tl(){
//    double time=(1.0*clock()/CLOCKS_PER_SEC);
//    return time>=0.985;
//}
bool used[100001];
int b=0;
void dfs(int v,int c_ti=1){
  //  if(is_tl()){
  //      puts("NO");
  //      exit(0);
  //  }
    b++;
    p.push_back(v);
    used[v]=true;
    if(b==n){
        for(auto i:g[v]){
            if(i==1){
                cout<<"YES"<<endl;
                for(auto u:p){
                   cout<<u<<' ';
                }
                cout<<1<<endl;
                exit(0);
            }
        }
        return;
    }
    for(auto i:g[v]){
        if(!used[i]){
            dfs(i,c_ti+1);
        }
    }
    b--;
    p.pop_back();
    used[v]=false;
    return;
}
void Bogdan(){
    //const time_t timer=time(NULL);
    int m;
    scanf("%d %d",&n,&m);
    int l,r;
    p.reserve(n);
    for(int i=0;i<m;i++){
        cin>>l>>r;
        g[l].push_back(r);
    }
    for(int i=1;i<=n;i++){
        if(!g[i].size()){
            cout<<"NO"<<endl;
            return;
        }
    }
    dfs(1);
    cout<<"NO"<<endl;
}
/*
*/
int main(){
    int t=1,n;
   // cin>>t;
    while(t--){
        Bogdan();
    }
}
