#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
inline int read() {
  int x(0), w(1);
  char c = getchar();
  while (c ^ '-' && (c < '0' || c > '9')) c = getchar();
  if (c == '-') w = -1, c = getchar();
  while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0', c = getchar();
  return x * w;
}
int n, x, y, f[N], dp[N];
int head[N], nxt[N << 1], to[N << 1], cost[N << 1], cnt;
priority_queue<int, vector<int>, greater<int> > q;
inline void add(int u, int v, int w) {
  to[++cnt] = v;
  cost[cnt] = w;
  nxt[cnt] = head[u];
  head[u] = cnt;
}
void dfs(int u, int Fa) {
  for (int i = head[u]; i; i = nxt[i]) {
    if (to[i] == Fa) continue;
    dfs(to[i], u);
    f[u] += f[to[i]];
    if (cost[i] == 1) ++f[u];
  }
}
void dfs2(int u, int Fa) {
  for (int i = head[u]; i; i = nxt[i]) {
    if (to[i] == Fa) continue;
    dp[to[i]] = dp[u];
    if (cost[i] == 0)
      dp[to[i]]++;
    else
      dp[to[i]]--;
    dfs2(to[i], u);
  }
}
int main() {
  n = read();
  for (int i = 1; i < n; ++i) {
    x = read(), y = read();
    add(x, y, 0);
    add(y, x, 1);
  }
  dfs(1, -1);
  dp[1] = f[1];
  dfs2(1, -1);
  int ans = n + 1;
  for (int i = 1; i <= n; ++i) ans = min(ans, dp[i]);
  printf("%d\n", ans);
  for (int i = 1; i <= n; ++i)
    if (dp[i] == ans) q.push(i);
  while (!q.empty()) {
    printf("%d ", q.top());
    q.pop();
  }
  return 0;
}
