#include #include #include #include using namespace std; struct Edge { int id; int fr; int to; }; int main() { int n, m; cin >> n >> m; vector edges; int left_to_right = 0; for (int id = 0; id < m; id++) { int fr, to; cin >> fr >> to; if (fr < to) { left_to_right += 1; } edges.push_back({id, fr, to}); } auto rng = std::default_random_engine(787788); shuffle(edges.begin(), edges.end(), rng); vector pos(n, -1); int used; vector use_edge(m, false); for (auto e : edges) { if (pos[e.fr] == -1 && pos[e.to] == -1) { pos[e.fr] = used; used += 1; pos[e.to] = used; used += 1; use_edge[e.id] = true; } else if (pos[e.to] == -1) { pos[e.to] = used; used += 1; use_edge[e.id] = true; } else if (pos[e.fr] < pos[e.to] && pos[e.fr] != -1) { use_edge[e.id] = true; } } cout << "YES\n"; int cnt_edges = 0; for (int i = 0; i < m; i++) { if (use_edge[i]) { cnt_edges += 1; } } cout << cnt_edges << '\n'; for (int i = 0; i < m; i++) { if (use_edge[i]) { cout << (i + 1) << " "; } } cout << '\n'; }