#include <bits/stdc++.h>
using namespace std;
vector<int> ed[1 << 20];
vector<int> nodes[1 << 20];
vector<pair<int, int> > edges;
int dp1[1 << 20];
vector<int> dp2[1 << 20];
int dp3[1 << 20];
bool vis[1 << 20];
void dfs(int x, int p) {
  if (vis[x]) return;
  vis[x] = true;
  dp1[x] = 1e9;
  int res = 0;
  for (int y : ed[x]) {
    if (p == edges[y].first || p == edges[y].second) continue;
    res += edges[y].second == x;
  }
  dp3[x] = res;
  int tot_rev = res;
  for (int y : ed[x]) {
    if (p == edges[y].first || p == edges[y].second) continue;
    int j = edges[y].first == x ? edges[y].second : edges[y].first;
    dfs(j, x);
    tot_rev += dp3[j];
  }
  for (int y : ed[x]) {
    if (p == edges[y].first || p == edges[y].second) continue;
    int j = edges[y].first == x ? edges[y].second : edges[y].first;
    int tmp = dp1[j] + (edges[y].first == x) + tot_rev - dp3[j] -
              (edges[y].second == x ? 1 : 0);
    if (tmp < dp1[x]) {
      dp1[x] = tmp;
      dp2[x].clear();
      dp2[x].insert(dp2[x].end(), dp2[j].begin(), dp2[j].end());
    } else if (tmp == dp1[x]) {
      dp2[x].insert(dp2[x].end(), dp2[j].begin(), dp2[j].end());
    }
    dp2[j].clear();
  }
  if (tot_rev < dp1[x]) {
    dp1[x] = tot_rev;
    dp2[x].clear();
    dp2[x].push_back(x);
  } else if (tot_rev == dp1[x]) {
    dp2[x].push_back(x);
  }
  dp3[x] = tot_rev;
}
int main() {
  int n;
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    nodes[x].push_back(y);
    nodes[y].push_back(x);
    ed[x].push_back(edges.size());
    ed[y].push_back(edges.size());
    edges.push_back({x, y});
  }
  dfs(1, -1);
  cout << dp1[1] << endl;
  sort(dp2[1].begin(), dp2[1].end());
  for (int x : dp2[1]) cout << x << " ";
  return 0;
}
