#include <bits/stdc++.h>
using namespace std;
struct edge {
  int to;
  int cons;
  int sz;
  int dir;
  edge(int _to = -1, int _cons = -1, int _dir = 0, int _sz = -1)
      : to(_to), dir(_dir), cons(_cons), sz(_sz) {}
};
vector<edge> ed[200100];
bool was[200100];
int ress[200100];
int newTo[200100];
int oldTn[200100];
int T = 0;
int dfs(int v) {
  newTo[T] = v;
  oldTn[v] = T;
  T++;
  was[v] = true;
  int k = ed[v].size();
  int res = 0;
  int yu = -1;
  for (int i = 0; i < k; i++) {
    int to = ed[v][i].to;
    if (!was[to]) {
      ed[v][i].cons = to;
      int qte = dfs(to);
      ed[v][i].sz = qte;
      res += qte;
    } else
      yu = i;
  }
  if (yu > -1) {
    ed[v][yu].cons = v;
    ed[v][yu].sz = res + 1;
  }
  return res + 1;
}
int anss[200100];
int ansc = 0;
int main() {
  int n;
  int a, b;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    a--, b--;
    ed[a].push_back(edge(b, -1, 1));
    ed[b].push_back(edge(a, -1, -1));
  }
  dfs(0);
  int mns = 0;
  for (int i = 0; i < n; i++) {
    int k = ed[i].size();
    for (int j = 0; j < k; j++) {
      if (ed[i][j].dir > 0) {
        if (ed[i][j].cons == ed[i][j].to) {
          ress[oldTn[ed[i][j].to]]++;
          ress[ed[i][j].sz + oldTn[ed[i][j].to]]--;
        } else {
          ress[oldTn[i]]--;
          ress[ed[i][j].sz + oldTn[i]]++;
          mns++;
        }
      }
    }
  }
  int bst = ress[0];
  anss[ansc++] = newTo[0];
  for (int i = 1; i < n; i++) {
    ress[i] = ress[i - 1] + ress[i];
    if (ress[i] < bst) {
      bst = ress[i];
      anss[0] = newTo[i];
      ansc = 1;
    } else if (ress[i] == bst)
      anss[ansc++] = newTo[i];
  }
  cout << bst + mns << endl;
  sort(anss, anss + ansc);
  for (int i = 0; i < ansc; i++) {
    if (i) cout << ' ';
    cout << anss[i] + 1;
  }
}
