#include <bits/stdc++.h>
using namespace std;
typedef struct Point {
  int x, y;
  bool operator<(const Point &other) const {
    if (x != other.x) return x < other.x;
    return y < other.y;
  }
};
int dp[510005];
vector<int> p[510005];
map<Point, int> m;
int ans[510005];
void DFS1(int t, int last) {
  int i, j, k;
  Point tag;
  dp[t] = 0;
  for (i = 0; i < p[t].size(); i++) {
    k = p[t][i];
    if (k == last) continue;
    DFS1(k, t);
    tag.x = t;
    tag.y = k;
    dp[t] += dp[k] + m[tag];
  }
}
void DFS2(int t, int last) {
  int i, j, k;
  Point tag;
  tag.x = last;
  tag.y = t;
  if (last == -1)
    ans[t] = dp[t];
  else {
    if (m[tag] == 0)
      ans[t] = ans[last] + 1;
    else
      ans[t] = ans[last] - 1;
  }
  for (i = 0; i < p[t].size(); i++) {
    k = p[t][i];
    if (k == last) continue;
    DFS2(k, t);
  }
}
int main() {
  int i, j, n, x, y, ok, s;
  Point tag;
  scanf("%d", &n);
  for (i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    p[x].push_back(y);
    p[y].push_back(x);
    tag.x = y;
    tag.y = x;
    m[tag] = 1;
  }
  DFS1(1, -1);
  DFS2(1, -1);
  s = 100000005;
  for (i = 1; i <= n; i++) {
    s = min(s, ans[i]);
  }
  printf("%d\n", s);
  ok = 0;
  for (i = 1; i <= n; i++) {
    if (ok == 0 && s == ans[i]) {
      printf("%d", i);
      ok = 1;
    } else if (s == ans[i]) {
      printf(" %d", i);
    }
  }
  printf("\n");
}
