import java.util.*; public class Main { static ArrayList> graph = new ArrayList<>(); static int[] ord; static int[] lowLink; static int count = 0; public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i = 0; i < n; i++) { graph.add(new ArrayList<>()); } int[] lefts = new int[n]; int[] rights = new int[n]; for (int i = 0; i < n; i++) { int a = sc.nextInt() - 1; int b = sc.nextInt() - 1; graph.get(a).add(b); graph.get(b).add(a); lefts[i] = a; rights[i] = b; } ord = new int[n]; lowLink = new int[n]; search(0, 0); ArrayList ans = new ArrayList<>(); for (int i = 0; i < n; i++) { if ((ord[lefts[i]] < ord[rights[i]] && ord[lefts[i]] >= lowLink[rights[i]]) || (ord[lefts[i]] > ord[rights[i]] && lowLink[lefts[i]] <= ord[rights[i]])) { ans.add(i + 1); } } StringBuilder sb = new StringBuilder(); Collections.sort(ans); sb.append(ans.size()).append("\n"); for (int i = 0; i < ans.size(); i++) { if (i > 0) { sb.append(" "); } sb.append(ans.get(i)); } System.out.println(sb); } static int search(int idx, int from) { if (ord[idx] > 0) { return ord[idx]; } count++; ord[idx] = count; lowLink[idx] = count; for (int x : graph.get(idx)) { if (x == from) { continue; } lowLink[idx] = Math.min(lowLink[idx], search(x, idx)); } return lowLink[idx]; } }