#include <bits/stdc++.h>
using namespace std;
long long MOD = 998244353;
const long long inf = -1e10;
const long long N = 1e6 + 10;
vector<pair<long long, long long>> graph[N];
long long subtree[N], fin[N], nodes[N];
long long preprocess(long long u, long long p) {
  subtree[u] = 0;
  nodes[u] = 0;
  for (auto i : graph[u]) {
    if (i.first == p) continue;
    subtree[u] += preprocess(i.first, u) + i.second;
    nodes[u] += nodes[i.first] + i.second;
  }
  return subtree[u];
}
void dfs(long long u, long long p, long long z) {
  long long partial = fin[p] - subtree[u] - z;
  if (p == 0) partial = -1;
  fin[u] = subtree[u] + partial + (z ^ 1);
  for (auto i : graph[u]) {
    if (i.first == p) continue;
    dfs(i.first, u, i.second);
  }
}
void go() {
  long long n;
  cin >> n;
  for (long long i = 0; i < n - 1; i++) {
    long long u, vv;
    cin >> u >> vv;
    graph[u].push_back({vv, 0});
    graph[vv].push_back({u, 1});
  }
  preprocess(1, -1);
  fin[0] = 0;
  nodes[0] = 0;
  dfs(1, 0, 0);
  long long idx = 1;
  for (long long i = 1; i <= n; i++)
    if (fin[idx] > fin[i]) idx = i;
  set<long long> ans;
  for (long long i = 1; i <= n; i++)
    if (fin[i] == fin[idx]) ans.insert(i);
  cout << fin[idx] << endl;
  for (auto i : ans) cout << i << " ";
}
signed main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long t = 1;
  cout << fixed << setprecision(12);
  while (t--) {
    go();
  }
}
