#include <bits/stdc++.h>
using namespace std;
inline long long re() {
  register long long x = 0;
  register bool f = 1;
  register char q;
  do {
    q = getchar();
    if (q == '-') f = 0;
  } while ((q < '0' || q > '9') && ~q);
  while (q >= '0' && q <= '9') {
    x = (x << 3) + (x << 1) + (q ^ '0');
    q = getchar();
  }
  return f ? x : -x;
}
const int N = 2e5 + 1;
int n;
struct edge {
  int to, len, nt;
} e[N << 1];
int head[N], tot;
inline void add(int f, int t, int w) {
  e[++tot] = (edge){t, w, head[f]};
  head[f] = tot;
}
int ans[N];
inline void dfs1(int now, int from) {
  for (int i = head[now]; i; i = e[i].nt) {
    if (e[i].to != from) {
      dfs1(e[i].to, now);
      ans[now] += ans[e[i].to] + e[i].len;
    }
  }
}
inline void dfs2(int now, int from) {
  for (int i = head[now]; i; i = e[i].nt) {
    if (e[i].to != from) {
      ans[e[i].to] = ans[now] + (e[i].len ? -1 : 1);
      dfs2(e[i].to, now);
    }
  }
}
int main() {
  n = re();
  for (int i = 1; i < n; i++) {
    int f = re(), t = re();
    add(f, t, 0);
    add(t, f, 1);
  }
  dfs1(1, 0);
  dfs2(1, 0);
  int mi = 2e9;
  for (int i = 1; i <= n; i++) {
    mi = min(mi, ans[i]);
  }
  printf("%d\n", mi);
  for (int i = 1; i <= n; i++) {
    if (ans[i] == mi) printf("%d ", i);
  }
  puts("");
  return 0;
}
