#include using namespace std; using ll = long long; constexpr char newl = '\n'; typedef pair P; vector< vector > G; vector ord, low; vector

bridge; void dfs(int cur, int par, int& t) { ord[cur] = ++t; low[cur] = ord[cur]; for (int nex : G[cur]) { if (nex == par) continue; if (ord[nex] == 0) { dfs(nex, cur, t); low[cur] = min(low[cur], low[nex]); if (ord[cur] < low[nex]) bridge.push_back(minmax(cur, nex)); } else { low[cur] = min(low[cur], ord[nex]); } } } void bridges(int v) { ord.resize(v, 0); low.resize(v); int t = 0; dfs(0, -1, t); } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; vector a(n), b(n); G.resize(n); for (int i = 0; i < n; i++) { cin >> a[i] >> b[i]; --a[i]; --b[i]; if (a[i] > b[i]) swap(a[i], b[i]); G[a[i]].push_back(b[i]); G[b[i]].push_back(a[i]); } bridges(n); set

s(bridge.begin(), bridge.end()); vector ans; for (int i = 0; i < n; i++) { if (s.find(P(a[i], b[i])) == s.end()) ans.push_back(i + 1); } cout << ans.size() << newl; for (size_t i = 0; i < ans.size(); i++) { cout << ans[i] << " \n"[i + 1 == ans.size()]; } return 0; }