import sys input = sys.stdin.readline sys.setrecursionlimit(10**5+10) from collections import * def dfs(v, pv): global pos seen[v] = True hist.append(v) for nv in G[v]: if nv==pv: continue if finished[nv]: continue if seen[nv] and not finished[nv]: pos = nv return dfs(nv, v) if pos!=-1: return hist.pop() finished[v] = True N = int(input()) G = [[] for _ in range(N)] edges = defaultdict(int) for i in range(N): a, b = map(int, input().split()) G[a-1].append(b-1) G[b-1].append(a-1) edges[(min(a-1, b-1), max(a-1, b-1))] = i pos = -1 seen = [False]*N finished = [False]*N hist = [] dfs(0, -1) ans = [] for i in range(len(hist)): u, v = hist[i], hist[(i+1)%len(hist)] u, v = min(u, v), max(u, v) ans.append(edges[(u, v)]+1) print(len(ans)) print(*ans)