#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
const int INF = 0x3f3f3f3f;
struct node {
  int s, to, next;
};
node que[N];
int head[N], f[N];
int cnt = 1, n, ans = INF;
inline void add(int u, int v, int w) {
  que[cnt].s = w;
  que[cnt].to = v;
  que[cnt].next = head[u];
  head[u] = cnt++;
  return;
}
void dfs1(int u, int fa) {
  for (register int i = head[u]; i != -1; i = que[i].next) {
    register int k = que[i].to;
    if (k == fa) continue;
    dfs1(k, u);
    f[u] += f[k] + que[i].s;
  }
  return;
}
void dfs2(int u, int fa) {
  for (register int i = head[u]; i != -1; i = que[i].next) {
    register int k = que[i].to;
    if (k == fa) continue;
    f[k] = f[u] + (que[i].s ? -1 : 1);
    dfs2(k, u);
  }
  return;
}
int main(void) {
  while (scanf("%d", &n) != EOF) {
    ans = INF;
    memset(head, -1, sizeof(head));
    memset(f, 0, sizeof(f));
    memset(que, 0, sizeof(que));
    cnt = 1;
    for (int i = 1; i < n; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      add(u, v, 0);
      add(v, u, 1);
    }
    dfs1(1, 0);
    dfs2(1, 0);
    for (int i = 1; i <= n; i++) ans = min(ans, f[i]);
    printf("%d\n", ans);
    for (int i = 1; i <= n; i++)
      if (f[i] == ans) printf("%d ", i);
    putchar('\n');
  }
  return 0;
}
