#include #include using namespace std; bool dfs(int v, vector>& graph, vector& colors, vector& topsort) { colors[v] = 1; for (int& u : graph[v]) { if (colors[u] == 0) { bool loop = dfs(u, graph, colors, topsort); if (loop) { return true; } } if (colors[u] == 1) { return true; } } colors[v] = 2; topsort.push_back(v); return false; } int main() { int n; int m; cin >> n >> m; vector> graph(n); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; u--; v--; graph[u].push_back(v); } vector colors(n); vector topsort; for (int i = 0; i < n; i++) { if (colors[i] == 0) { if (dfs(i, graph, colors, topsort)) { cout << "No" << endl; return 0; } } } cout << "Yes\n"; for (int i = topsort.size() - 1; i >= 0; i--) { cout << topsort[i] + 1 << ' '; } return 0; }