#include <bits/stdc++.h>
using namespace std;
int n, add_edge;
int head[200010 << 1], dp[200010];
struct node {
  int next, to;
  bool w;
} edge[200010 << 1];
int read() {
  int s = 0, f = 0;
  char ch = getchar();
  while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
  while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar();
  return f ? -s : s;
}
void add(int from, int to, bool w) {
  edge[++add_edge].next = head[from];
  edge[add_edge].to = to;
  edge[add_edge].w = w;
  head[from] = add_edge;
}
void dfs(int x, int fa) {
  for (int i = head[x]; i; i = edge[i].next) {
    int to = edge[i].to;
    if (to == fa) continue;
    if (edge[i].w == 1) dp[1]++;
    dfs(to, x);
  }
}
void dfs2(int x, int fa) {
  for (int i = head[x]; i; i = edge[i].next) {
    int to = edge[i].to;
    if (to == fa) continue;
    if (edge[i].w == 1)
      dp[to] = dp[x] - 1;
    else
      dp[to] = dp[x] + 1;
    dfs2(to, x);
  }
}
int main() {
  n = read();
  for (int i = 1, x, y; i < n; i++) {
    x = read(), y = read();
    add(x, y, 0), add(y, x, 1);
  }
  dfs(1, 1);
  dfs2(1, 1);
  int minn = 1111111111;
  for (int i = 1; i <= n; i++) minn = min(minn, dp[i]);
  printf("%d\n", minn);
  for (int i = 1; i <= n; i++)
    if (dp[i] == minn) cout << i << " ";
  return 0;
}
