#include <bits/stdc++.h>
using namespace std;
void ASS(bool bb) {
  if (!bb) {
    ++*(int*)0;
  }
}
#pragma comment(linker, "/STACK:106777216")
const int N = 201000;
struct E {
  int x, t;
};
vector<E> g[N];
int ans[N];
int rev[N];
int sz[N];
void dfs(int x, int par) {
  rev[x] = 0;
  sz[x] = 1;
  vector<E>::iterator todel = g[x].end();
  for (int i = 0; i < (int)(g[x].size()); i++) {
    int y = g[x][i].x;
    if (y == par) {
      todel = g[x].begin() + i;
      continue;
    }
    dfs(y, x);
    rev[x] += rev[y] + g[x][i].t;
    sz[x] += sz[y];
  }
  if (todel != g[x].end()) g[x].erase(todel);
}
void D(int x, int add) {
  if (g[x].size() == 0) {
    ans[x] = add;
    return;
  }
  int sum = 0;
  for (int i = 0; i < (int)(g[x].size()); i++) {
    int y = g[x][i].x;
    sum += rev[y] + g[x][i].t;
  }
  ans[x] = N;
  for (int i = 0; i < (int)(g[x].size()); i++) {
    int y = g[x][i].x;
    int t = sum - (rev[y] + g[x][i].t);
    ans[x] = min(ans[x], add + t + rev[y] + g[x][i].t);
    D(y, add + t + (g[x][i].t == 0));
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < (int)(n - 1); i++) {
    int x, y;
    cin >> x >> y;
    E e;
    e.x = y;
    e.t = 0;
    g[x].push_back(e);
    e.x = x;
    e.t = 1;
    g[y].push_back(e);
  }
  dfs(1, N - 1);
  D(1, 0);
  int Min = n;
  for (int i = 0; i < (int)(n + 1); i++)
    if (i) Min = min(ans[i], Min);
  vector<int> v;
  for (int i = 0; i < (int)(n + 1); i++)
    if (i && ans[i] == Min) v.push_back(i);
  cout << Min << endl;
  for (int i = 0; i < (int)(v.size()); i++) {
    if (i) cout << " ";
    cout << v[i];
  }
  cout << endl;
  return 0;
}
