import sys,os,io input = sys.stdin.readline from collections import defaultdict class Graph: def __init__(self, N): self.V = N self.edge = [[] for _ in range(self.V)] self.edges = defaultdict(lambda: 0) self.prev = [N]*N self.parent = [N]*N def add_edge(self, a, b, i): self.edge[a].append(b) self.edges[(a,b)] = i 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 bfs(self, start): stack = deque([start]) self.parent[start] = -1 while stack: v = stack.pop() for u in self.edge[v]: if u==self.parent[v]: continue if self.parent[u]!=N: return v,u self.parent[u]=v #頂点に対する処理 stack.append(u) return 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()) a,b = min(a-1,b-1), max(a-1,b-1) G.add_edge(a,b,i+1) G.add_edge(b,a,i+1) v,u = G.bfs(0) lis = [] lis.append(G.edges[v,u]) while G.parent[v]!=-1: lis.append(G.edges[(G.parent[v],v)]) v = G.parent[v] while G.parent[u]!=-1: lis.append(G.edges[(G.parent[u],u)]) u = G.parent[u] lis.sort() ans = set() for l1,l2 in zip(lis,lis[1:]+[-1]): if l1!=l2: ans.add(l1) print(len(ans)) print(*ans)