#include <bits/stdc++.h>
class Read {
 public:
  template <class T>
  Read& operator>>(T& number) {
    bool negative = false;
    register int c;
    number = 0;
    c = getchar();
    if (c == '-') {
      negative = true;
      c = getchar();
    }
    for (; (c > 47 && c < 58); c = getchar()) number = number * 10 + c - 48;
    if (negative) number *= -1;
    return *this;
  }
};
Read cin;
const int NMAX = 2 * 1e5 + 1;
std::vector<int> g[NMAX];
std::set<std::pair<int, int> > orientedEdges;
int n, x, y, maxLevel, deepestNode, cnt;
std::bitset<NMAX> used;
void DFS(int node, int level) {
  used[node] = 1;
  if (level > maxLevel) {
    maxLevel = level;
    deepestNode = node;
  }
  for (auto i : g[node])
    if (used[i] == 0) {
      if (orientedEdges.find({node, i}) == orientedEdges.end()) cnt++;
      DFS(i, level + 1);
    }
}
std::vector<int> capitals;
int maxReversed = NMAX;
void solve(int node, int cnt) {
  if (cnt < maxReversed) {
    maxReversed = cnt;
    capitals.clear();
    capitals.push_back(node);
  } else if (cnt <= maxReversed)
    capitals.push_back(node);
  used[node] = 1;
  for (auto i : g[node])
    if (used[i] == 0) {
      int newCount = cnt - 1;
      if (orientedEdges.find({node, i}) != orientedEdges.end())
        newCount = cnt + 1;
      solve(i, newCount);
    }
}
int main() {
  cin >> n;
  for (int i = 1; i < n; ++i) {
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
    orientedEdges.insert({x, y});
  }
  DFS(1, 1);
  used.reset();
  cnt = 0;
  DFS(deepestNode, -n);
  used.reset();
  solve(deepestNode, cnt);
  std::sort(capitals.begin(), capitals.end());
  std::cout << maxReversed << '\n';
  for (auto i : capitals) std::cout << i << ' ';
  return 0;
}
