#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, dp[200005];
struct edge {
  int to;
  bool dir;
  edge(int v = 0, bool w = 0) { to = v, dir = w; }
};
vector<edge> e[200005];
void dfs1(int x, int f) {
  for (int i = 0, v, w; i < e[x].size(); i++) {
    v = e[x][i].to, w = e[x][i].dir;
    if (v == f) continue;
    dfs1(v, x);
    dp[x] += dp[v] + w;
  }
}
void dfs2(int x, int f) {
  for (int i = 0, v, w; i < e[x].size(); i++) {
    v = e[x][i].to, w = e[x][i].dir;
    if (v == f) continue;
    dp[v] = dp[x] + (w ? -1 : 1);
    dfs2(v, x);
  }
}
int main() {
  while (scanf("%d", &n) != EOF) {
    memset(dp, 0, sizeof(dp));
    for (int i = 1; i <= n; i++) e[i].clear();
    for (int i = 1, u, v; i < n; i++) {
      scanf("%d %d", &u, &v);
      e[u].push_back(edge(v, 0));
      e[v].push_back(edge(u, 1));
    }
    dfs1(1, 0);
    dfs2(1, 0);
    int k = INF;
    for (int i = 1; i <= n; i++)
      if (dp[i] < k) k = dp[i];
    printf("%d\n", k);
    for (int i = 1; i <= n; i++)
      if (dp[i] == k) printf("%d ", i);
    puts("");
  }
  return 0;
}
