import sys,os,io input = sys.stdin.readline class Graph: def __init__(self, N): self.V = N self.edge = [[] for _ in range(self.V)] self.edges = [0]*(N*2+1) self.visited = [0]*N self.parent = [N]*N def add_edge(self, a, b, i): self.edge[a].append((b,i)) self.edges[i] = (a,b) def dfs(self, start): stack = [start] self.parent[start] = -1 self.visited[start] = 1 #記録したい値の配列を定義 while stack: v = stack[-1] for u,i in self.edge[v]: if u==self.parent[v]: continue if self.parent[u]==N: #子へ降ろす self.parent[u]=v stack.append(u) break else: return u else: stack.pop() def bfs1(self, start): stack = [start] self.parent[start] = -1 while stack: v = stack.pop() for u,i in self.edge[v]: if u==self.parent[v]: continue if self.parent[u]!=N: return u self.parent[u]=v #頂点に対する処理 stack.append(u) return def bfs(self, start): d = deque() d.append(dict()) cyc = dict() cnt = 0 while len(d)>0 and cntlen(cyc): cyc = dic else: d.append(dic) cnt += 1 return cyc from collections import deque from copy import copy N = int(input()) G = Graph(N) for i in range(N): a,b = map(int, input().split()) G.add_edge(a-1,b-1,i+1) G.add_edge(b-1,a-1,N+i+1) ans = set() cyc = G.bfs1(0) es = G.bfs(cyc) for e in es.keys(): ans.add(e) ans = list(ans) print(len(ans)) print(*ans)