#include <bits/stdc++.h>
using namespace std;
typedef struct {
  int to;
  int next;
  int wt;
} Edge;
Edge tree[200010 * 2];
int n;
int d[200010], head[200010], cnt;
void add(int from, int to, int wt) {
  tree[cnt].to = to;
  tree[cnt].wt = wt;
  tree[cnt].next = head[from];
  head[from] = cnt++;
}
void init() {
  memset(d, 0, sizeof(d));
  memset(head, -1, sizeof(head));
  cnt = 0;
}
void dfs0(int root, int par) {
  d[root] = 0;
  int to;
  for (int i = head[root]; i != -1; i = tree[i].next) {
    to = tree[i].to;
    if (to != par) {
      dfs0(to, root);
      d[root] += d[to] + tree[i].wt;
    }
  }
}
void dfs1(int root, int par) {
  int to;
  for (int i = head[root]; i != -1; i = tree[i].next) {
    to = tree[i].to;
    if (to != par) {
      d[to] = d[root] + (tree[i].wt == 0 ? 1 : -1);
      dfs1(to, root);
    }
  }
}
int main() {
  int a, b;
  while (~scanf("%d", &n)) {
    init();
    for (int i = 0; i < n - 1; ++i) {
      scanf("%d%d", &a, &b);
      add(a, b, 0);
      add(b, a, 1);
    }
    dfs0(1, 0);
    dfs1(1, 0);
    int ans = *min_element(d + 1, d + n + 1);
    cout << ans << endl;
    vector<int> vec;
    vec.clear();
    for (int i = 1; i <= n; ++i)
      if (d[i] == ans) vec.push_back(i);
    for (int i = 0; i < vec.size(); ++i)
      printf("%d%c", vec[i], i < vec.size() - 1 ? ' ' : '\n');
  }
  return 0;
}
