#include <bits/stdc++.h>
using namespace std;
const int maxn = 200050;
const int inf = 0x3f3f3f3f;
struct Node {
  int v, w;
};
vector<Node> q[maxn];
int dp[maxn], res, vis[maxn];
void init(int n) {
  for (int i = 1; i <= n; i++) {
    q[i].clear();
    vis[i] = 0;
  }
}
void dfs1(int s) {
  vis[s] = 1;
  int len = q[s].size();
  for (int i = 0; i < len; i++) {
    int v = q[s][i].v;
    if (!vis[v]) {
      res += q[s][i].w;
      dfs1(v);
    }
  }
}
void dfs(int s) {
  vis[s] = 1;
  int len = q[s].size();
  for (int i = 0; i < len; i++) {
    int v = q[s][i].v;
    int w = q[s][i].w;
    if (!vis[v]) {
      if (!w) {
        dp[v] = dp[s] + 1;
      } else {
        dp[v] = dp[s] - 1;
      }
      dfs(v);
    }
  }
}
int main() {
  int n;
  while (~scanf("%d", &n)) {
    init(n);
    for (int i = 0; i < n - 1; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      Node temp;
      temp.v = b;
      temp.w = 0;
      q[a].push_back(temp);
      temp.v = a;
      temp.w = 1;
      q[b].push_back(temp);
    }
    res = 0;
    dfs1(1);
    dp[1] = res;
    memset(vis, 0, sizeof(vis));
    dfs(1);
    int Min = inf;
    for (int i = 1; i <= n; i++) {
      Min = min(Min, dp[i]);
    }
    printf("%d\n", Min);
    for (int i = 1; i <= n; i++) {
      if (dp[i] == Min) printf("%d ", i);
    }
    printf("\n");
  }
}
