#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int to, next, cmp;
} edge[400010];
int head[200010], cnt_edge;
void add_edge(int u, int v, int cmp) {
  edge[++cnt_edge].to = v;
  edge[cnt_edge].next = head[u];
  edge[cnt_edge].cmp = cmp;
  head[u] = cnt_edge;
}
bool vis[200010];
int ans[200010];
void dfs1(int u) {
  vis[u] = 1;
  for (int i = head[u]; i; i = edge[i].next) {
    if (vis[edge[i].to]) continue;
    if (!edge[i].cmp) ans[1]++;
    dfs1(edge[i].to);
  }
  vis[u] = 0;
  return;
}
int minn;
void dfs(int u) {
  vis[u] = 1;
  minn = min(minn, ans[u]);
  for (int i = head[u]; i; i = edge[i].next) {
    int v = edge[i].to;
    if (vis[v]) continue;
    if (edge[i].cmp)
      ans[v] = ans[u] + 1;
    else
      ans[v] = ans[u] - 1;
    dfs(v);
  }
  vis[u] = 0;
}
int main() {
  int n;
  while (cin >> n) {
    minn = 1e8;
    ans[1] = 0;
    cnt_edge = 0;
    for (int i = 1; i <= n; i++) head[i] = 0;
    int u, v;
    for (int i = 1; i < n; i++) {
      scanf("%d%d", &u, &v);
      add_edge(u, v, 1);
      add_edge(v, u, 0);
    }
    dfs1(1);
    dfs(1);
    printf("%d\n", minn);
    for (int i = 1; i <= n; i++) {
      if (ans[i] == minn) {
        printf("%d ", i);
      }
    }
    printf("\n");
  }
  return 0;
}
