#include #include using namespace std; vector > adj; vector vis; vector order; int n, m; enum {fresh, busy, done}; bool dfs (int v) { if (vis[v] != fresh) return vis[v] == done; vis[v] = busy; for (auto u : adj[v]) if (!dfs (u)) return false; order.push_back (v); vis[v] = done; return true; } int main () { cin >> n >> m; adj = vector > (n); for (int j = 0; j < m; j++) { int u, v; cin >> u >> v; u -= 1; v -= 1; adj[v].push_back (u); } vis = vector (n); bool ok = true; for (int v = 0; v < n; v++) ok &= dfs (v); if (ok) { cout << "YES" << endl; for (auto v : order) cout << v + 1 << " "; cout << endl; } else cout << "NO" << endl; return 0; }