#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef string str;
typedef pair<ll, ll> pll;
const ll MAXNUM=100007;

ll n, m, a, b, impos;
vector<ll> reb[MAXNUM], inreb[MAXNUM];
pll step[MAXNUM];

void dfs(ll v,ll par,ll val){
    step[v].first=val;
    for(auto to : reb[v]){
        if(to!=par && step[v].first>=step[to].first && to!=1) dfs(to, v, val+1);
    }
}

int main()
{
    scanf("%lld %lld", &n, &m);
    for(int u=1; u<=m; u++){
        scanf("%lld %lld", &a, &b);
        reb[a].push_back(b);
        inreb[b].push_back(a);
    }
    for(int i=1; i<=n; i++){
        if(reb[i].empty() || inreb[i].empty()) impos=1;
    }
    for(int i=1; i<=n; i++){
        step[i]={0, i};
    }
    dfs(1, 0, 0);
    sort(step+1, step+1+n);
    for(int i=2; i<=n; i++){
        if(step[i].first<=step[i-1].first) impos=1;
    }
    if(impos==1) cout << "NO";
    else{
        cout << "YES\n";
        for(int i=1; i<=n; i++){
            printf("%lld ", step[i].second);
        }
        cout << 1;
    }
    return 0;
}
