#include <bits/stdc++.h>
using namespace std;
int nxt[1000010], vv[1000010], w[1000010], h[1000010], e;
int n;
int q[1000010];
int dep[1000010];
int num[1000010], num1[1000010];
int vec[1000010];
void add(int u, int v) {
  vv[e] = v, w[e] = 0, nxt[e] = h[u], h[u] = e++;
  vv[e] = u, w[e] = 1, nxt[e] = h[v], h[v] = e++;
}
void bfs() {
  int hd, tl;
  hd = tl = 0;
  q[tl++] = 1;
  dep[1] = 1;
  while (hd < tl) {
    int u = q[hd++], v;
    for (int i = h[u]; i + 1; i = nxt[i]) {
      v = vv[i];
      if (dep[v]) continue;
      dep[v] = dep[u] + 1;
      q[tl++] = v;
    }
  }
}
void dfs(int u) {
  int v;
  for (int i = h[u]; i + 1; i = nxt[i]) {
    v = vv[i];
    if (dep[v] <= dep[u]) continue;
    num1[v] = num1[u] - w[i] + w[i ^ 1];
    dfs(v);
  }
}
void solve() {
  int u, v;
  for (int i = n - 1; i >= 0; i--) {
    u = q[i];
    for (int j = h[u]; j + 1; j = nxt[j]) {
      v = vv[j];
      if (dep[u] >= dep[v]) continue;
      num1[u] += num1[v] + w[j];
    }
  }
  dfs(1);
  int ans = 0x3f3f3f3f;
  for (int i = 1; i <= n; i++) {
    if (ans == num1[i]) {
      vec[++vec[0]] = i;
    } else if (ans > num1[i]) {
      ans = num1[i];
      vec[0] = 0;
      vec[++vec[0]] = i;
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= vec[0]; i++) printf("%d ", vec[i]);
  puts("");
}
int main() {
  int a, b;
  scanf("%d", &n);
  memset(h, -1, sizeof(h));
  e = 0;
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &a, &b);
    add(a, b);
  }
  bfs();
  solve();
}
