#include <bits/stdc++.h>
using namespace std;
bool vis[200005];
vector<pair<long long, long long> > edge[200005];
long long cost[200005], par[200005], dep[200005], back[200005];
pair<long long, long long> ans[200005];
void dfs(long long u, long long p, long long d) {
  long long x;
  par[u] = p;
  dep[u] = d;
  for (auto v : edge[u]) {
    if (v.first != p) {
      if (!v.second) cost[u]++;
      dfs(v.first, u, d + 1);
      cost[u] += cost[v.first];
    }
  }
}
void bfs(long long u) {
  queue<long long> q;
  q.push(u);
  memset(vis, 0, sizeof vis);
  vis[u] = 1;
  back[u] = 0;
  long long t, v, x;
  while (!q.empty()) {
    t = q.front();
    q.pop();
    for (long long i = 0; i < edge[t].size(); i++) {
      v = edge[t][i].first;
      x = edge[t][i].second;
      if (!vis[v]) {
        vis[v] = 1;
        q.push(v);
        if (x == 1)
          x = 0;
        else
          x = 1;
        back[v] = back[t] + x;
      }
    }
  }
}
int main() {
  long long n, u, v;
  scanf("%lld", &n);
  for (long long i = 1; i <= n - 1; ++i) {
    scanf("%lld", &u), scanf("%lld", &v);
    edge[u].push_back(make_pair(v, 1));
    edge[v].push_back(make_pair(u, 0));
  }
  long long root = 1;
  dfs(root, -root, 0);
  bfs(root);
  long long tmp;
  for (long long i = 1; i <= n; i++) {
    tmp = cost[i] + (dep[i] - back[i]);
    tmp += cost[root] - (back[i] + cost[i]);
    ans[i].first = tmp;
    ans[i].second = i;
  }
  sort(ans + 1, ans + n + 1);
  printf("%lld\n", ans[1].first);
  printf("%lld", ans[1].second);
  for (long long i = 2; i <= n; i++) {
    if (ans[i - 1].first == ans[i].first) {
      printf(" %lld", ans[i].second);
    } else {
      break;
    }
  }
  printf("\n");
  return 0;
}
