#include <bits/stdc++.h>
using namespace std;
int dist[300000] = {0};
int reverseEdges[300000] = {0};
int vis[300000] = {0};
vector<vector<pair<int, int> > > tree;
int allReverseEdges = 0;
void calcRevEdges(int u, int p) {
  if (vis[u]) return;
  vis[u] = 1;
  for (int i = 0; i < (int)tree[u].size(); i++) {
    int v = tree[u][i].first;
    int c = tree[u][i].second;
    if (v == p) continue;
    dist[v] = dist[u] + 1;
    reverseEdges[v] = reverseEdges[u];
    if (c) {
      allReverseEdges += 1;
      reverseEdges[v] += 1;
    }
    calcRevEdges(v, u);
  }
}
int main() {
  int n;
  scanf("%d", &n);
  tree.resize(n);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    a -= 1;
    b -= 1;
    tree[a].push_back(make_pair(b, 0));
    tree[b].push_back(make_pair(a, 1));
  }
  calcRevEdges(0, -1);
  int ans = INT_MAX;
  for (int i = 0; i < n; i++)
    ans = min(ans, allReverseEdges - 2 * reverseEdges[i] + dist[i]);
  printf("%d\n", ans);
  for (int i = 0; i < n; i++)
    if (ans == allReverseEdges - 2 * reverseEdges[i] + dist[i])
      printf("%d ", i + 1);
  return 0;
}
