#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 19;
vector<int> e[N];
vector<int> fa[N];
set<int> efind[N];
set<int> ffind[N];
vector<int> sq[N];
int depfa[N];
bool vis[N];
int dp[N];
void dfs(int x) {
  vis[x] = 1;
  int sz = e[x].size();
  for (int i = 0; i < sz; i++) {
    int son = e[x][i];
    if (vis[son] == 1) {
      continue;
    }
    dfs(son);
    sq[x].push_back(son);
    depfa[son] = x;
    dp[x] += dp[son];
  }
  sz = fa[x].size();
  for (int i = 0; i < sz; i++) {
    int f = fa[x][i];
    if (vis[f] == 1) {
      continue;
    }
    dfs(f);
    sq[x].push_back(f);
    depfa[f] = x;
    dp[x] += dp[f] + 1;
  }
  return;
}
struct node {
  int data;
  int id;
};
node ans[N];
void solve(int x) {
  vis[x] = 1;
  int sz = sq[x].size();
  for (int i = 0; i < sz; i++) {
    int son = sq[x][i];
    if (vis[son] == 1) {
      continue;
    }
    if (ffind[son].count(x)) {
      dp[son] = dp[x] + 1;
    } else {
      dp[son] = dp[x] - 1;
    }
    solve(son);
  }
  return;
}
bool operator<(node a, node b) {
  return a.data < b.data;
  if (a.data == b.data) return a.id < b.id;
}
int main() {
  int n;
  scanf("%d", &n);
  int a, b;
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &a, &b);
    e[a].push_back(b);
    efind[a].insert(b);
    fa[b].push_back(a);
    ffind[b].insert(a);
  }
  depfa[1] = 0;
  dfs(1);
  memset(vis, 0, sizeof(vis));
  solve(1);
  for (int i = 1; i <= n; i++) {
    ans[i].data = dp[i];
    ans[i].id = i;
  }
  int minn = 0x7f7f7f7f;
  int minid = 0x7f7f7f7f;
  for (int i = 1; i <= n; i++) {
    if (minn > dp[i]) {
      minn = dp[i];
      minid = i;
    }
  }
  printf("%d\n%d", minn, minid);
  for (int i = 1; i <= n; i++) {
    if (dp[i] == minn && minid != i) printf(" %d", i);
  }
  printf("\n");
}
