mod = 1000000007 eps = 10**-9 def main(): import sys from collections import deque input = sys.stdin.buffer.readline class UnionFind(): def __init__(self, n): self.n = n self.root = [-1] * (n + 1) self.rnk = [0] * (n + 1) def find_root(self, x): while self.root[x] >= 0: x = self.root[x] return x def unite(self, x, y): x = self.find_root(x) y = self.find_root(y) if x == y: return elif self.rnk[x] > self.rnk[y]: self.root[x] += self.root[y] self.root[y] = x else: self.root[y] += self.root[x] self.root[x] = y if self.rnk[x] == self.rnk[y]: self.rnk[y] += 1 def isSameGroup(self, x, y): return self.find_root(x) == self.find_root(y) def size(self, x): return -self.root[self.find_root(x)] N = int(input()) E = [] UF = UnionFind(N) aa = bb = 0 ii = N+1 adj = [[] for _ in range(N+1)] for i in range(1, N+1): a, b = map(int, input().split()) E.append((a, b)) if UF.isSameGroup(a, b): aa = a bb = b ii = i else: UF.unite(a, b) adj[a].append((b, i)) adj[b].append((a, i)) que = deque() que.append(1) seen = [-1] * (N+1) seen[1] = 0 par = [0] * (N+1) while que: v = que.popleft() for u, e in adj[v]: if seen[u] == -1: seen[u] = seen[v] + 1 par[u] = (v, e) que.append(u) ans = {ii} v = aa while v != 1: p, e = par[v] ans.add(e) v = p v = bb while v != 1: p, e = par[v] if e in ans: ans.discard(e) else: ans.add(e) v = p print(len(ans)) print(*ans) if __name__ == '__main__': main()