#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 10;
int deg[maxn], d[maxn];
int mn = 1000000;
int k = 0;
bool mark[maxn], tic[maxn];
int dist1[maxn], dist2[maxn];
vector<int> v[maxn], u[maxn];
void dfs(int x) {
  mark[x] = 1;
  for (int i = 0; i < v[x].size(); i++) {
    if (mark[v[x][i]] == 0) {
      if (u[x][i] > 0) {
        dist1[v[x][i]] = dist1[x] + 1;
        dist2[v[x][i]] = dist2[x];
      } else {
        dist2[v[x][i]] = dist2[x] + 1;
        dist1[v[x][i]] = dist1[x];
      }
      dfs(v[x][i]);
    }
  }
}
void dfse(int x) {
  tic[x] = 1;
  int k = 0;
  for (int i = 0; i < v[x].size(); i++) {
    if (tic[v[x][i]] == 0) {
      dfse(v[x][i]);
      k += d[v[x][i]];
      if (u[x][i] < 0) k++;
    }
  }
  d[x] = k;
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    int a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
    u[a].push_back(i);
    u[b].push_back(-i);
    deg[b]++;
  }
  int pq = 0;
  for (int i = 1; i <= n; i++) {
    if (deg[i] == 0) {
      dfse(i);
      pq = d[i];
      dfs(i);
      break;
    }
  }
  for (int i = 1; i <= n; i++) {
    mn = min(dist1[i] - dist2[i], mn);
  }
  cout << mn + pq << endl;
  for (int i = 1; i <= n; i++) {
    if (dist1[i] - dist2[i] == mn) cout << i << " ";
  }
  return 0;
}
