#define PROBLEM "https://yukicoder.me/problems/no/1254" #include using namespace std; template using V = vector; using ll = long long; #define REP(i,n) for(ll i=0; i namori_loop(const V>& g) { V roots; V seen(g.size()); int st; auto dfs = [&](auto&& self, int u, int p) -> bool { seen[u] = 1; for(int v : g[u]) { if(v == p) continue; if(seen[v]) { st = v; roots.push_back(u); return true; } if(self(self, v, u)) { roots.push_back(u); return u != st; } } return false; }; dfs(dfs, 0, -1); return roots; }; int main() { int n; cin >> n; V> g(n); map, int> eid; REP(i, n) { int a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); eid[{a, b}] = eid[{b, a}] = i; } V loop = namori_loop(g); int m = loop.size(); cout << m << endl; REP(i, m) { cout << eid[{loop[i], loop[(i+1)%m]}]+1 << " \n"[i==m-1]; } }