#include <bits/stdc++.h>
using namespace std;
vector<int> son[200000 + 10];
vector<int> w[200000 + 10];
int mark[200000 + 10];
int dp[200000 + 10];
int mi;
int n;
void dfs1(int u) {
  mark[u] = 1;
  if (son[u].empty()) return;
  for (int i = 0; i < son[u].size(); ++i) {
    int v = son[u][i];
    if (!mark[v]) {
      dfs1(v);
      dp[u] += dp[v] + w[u][i];
    }
  }
}
void dfs2(int u) {
  mark[u] = 1;
  if (son[u].empty()) return;
  for (int i = 0; i < son[u].size(); ++i) {
    int v = son[u][i];
    if (!mark[v]) {
      dp[v] += dp[u] - dp[v] + (w[u][i] == 1 ? 0 : 1) - w[u][i];
      dfs2(v);
    }
  }
}
void solve() {
  mi = dp[1];
  for (int i = 1; i <= n; ++i) {
    if (dp[i] < mi) {
      mi = dp[i];
    }
  }
}
void output() {
  printf("%d\n", mi);
  int flag = 0;
  for (int i = 1; i <= n; ++i) {
    if (dp[i] == mi) {
      if (flag) printf(" ");
      printf("%d", i);
      flag = 1;
    }
  }
}
int main() {
  int a;
  int b;
  scanf("%d", &n);
  memset(dp, 0, sizeof(dp));
  memset(mark, 0, sizeof(mark));
  for (int i = 1; i < n; ++i) {
    scanf("%d%d", &a, &b);
    son[a].push_back(b);
    w[a].push_back(0);
    son[b].push_back(a);
    w[b].push_back(1);
  }
  dfs1(1);
  memset(mark, 0, sizeof(mark));
  dfs2(1);
  solve();
  output();
  return 0;
}
