#include <bits/stdc++.h>
using namespace std;
int max(int a, int b) {
  if (a > b) return a;
  return b;
}
int min(int a, int b) {
  if (a < b) return a;
  return b;
}
int siz[2000000 + 1];
int tot, st[2000000 + 1];
struct edge {
  int to, last;
  bool val;
} e[2000000 << 1];
void add(int a, int b, bool c) {
  e[++tot].to = b;
  e[tot].val = c;
  e[tot].last = st[a];
  st[a] = tot;
}
int n;
int f[2000000 + 1];
void dfs1(int u, int fa) {
  for (int i = st[u]; i != 0; i = e[i].last) {
    int v = e[i].to;
    if (v == fa) continue;
    dfs1(v, u);
    f[u] += f[v] + e[i].val;
  }
}
void dfs2(int u, int fa) {
  for (int i = st[u]; i != 0; i = e[i].last) {
    int v = e[i].to;
    if (v == fa) continue;
    if (e[i].val == 0)
      f[v] = f[u] + 1;
    else
      f[v] = f[u] - 1;
    dfs2(v, u);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    add(a, b, false);
    add(b, a, true);
  }
  dfs1(1, 0);
  dfs2(1, 0);
  int minn = 2147483647;
  for (int i = 1; i <= n; i++) minn = min(minn, f[i]);
  printf("%d\n", minn);
  for (int i = 1; i <= n; i++)
    if (f[i] == minn) printf("%d ", i);
  return 0;
}
