#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int next, val;
};
vector<Edge> V[200010];
int dp[200010][2];
void dfs1(int u, int pre) {
  dp[u][0] = 0;
  for (int i = 0; i < V[u].size(); i++) {
    int son = V[u][i].next;
    if (son == pre) continue;
    dfs1(son, u);
    dp[u][0] += (dp[son][0] + V[u][i].val);
  }
}
void dfs2(int u, int pre, int c) {
  if (u == pre) {
    dp[u][1] = dp[u][0];
  } else {
    if (V[pre][c].val == 1)
      dp[u][1] = dp[pre][1] - 1;
    else
      dp[u][1] = dp[pre][1] + 1;
  }
  for (int i = 0; i < V[u].size(); i++) {
    int son = V[u][i].next;
    if (son == pre) continue;
    dfs2(son, u, i);
  }
}
int main() {
  int n;
  while (cin >> n) {
    for (int i = 1; i <= n; i++) V[i].clear();
    for (int i = 1; i < n; i++) {
      int a, b;
      cin >> a >> b;
      Edge E;
      E.next = b;
      E.val = 0;
      V[a].push_back(E);
      E.next = a;
      E.val = 1;
      V[b].push_back(E);
    }
    dfs1(1, 1);
    dfs2(1, 1, 0);
    int minn = (1 << 30);
    for (int i = 1; i <= n; i++) minn = min(dp[i][1], minn);
    cout << minn << endl;
    for (int i = 1; i <= n; i++)
      if (dp[i][1] == minn) cout << i << " ";
    cout << endl;
  }
  return 0;
}
