#include <bits/stdc++.h>
using namespace std;
string vow = "aeiou";
int month[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int dxhorse[] = {-2, -2, -1, -1, 1, 1, 2, 2};
const int dyhorse[] = {1, -1, 2, -2, 2, -2, 1, -1};
const int dx[] = {-1, 0, 0, 1};
const int dy[] = {0, -1, 1, 0};
const long double pie = 3.1415926535897932384626;
const long long mod = 1e9 + 7;
const int N = 2e5 + 2;
int n;
vector<int> g[N];
set<pair<int, int> > ed;
void read() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g[a].push_back(b);
    g[b].push_back(a);
    ed.insert({a, b});
  }
}
int dis[N];
int red[N];
bool vis[N];
int tot_red = 0;
char find_color_of_edge(int a, int b) {
  pair<int, int> temp;
  temp.first = a;
  temp.second = b;
  if (ed.count(temp))
    return 'G';
  else
    return 'R';
}
void dfs(int node) {
  vis[node] = 1;
  for (auto i : g[node]) {
    if (vis[i]) continue;
    ;
    dis[i] = dis[node] + 1;
    red[i] = red[node];
    char col = find_color_of_edge(node, i);
    if (col == 'R') red[i]++, tot_red++;
    dfs(i);
  }
}
int ans[N];
void solve(int test_case) {
  read();
  dfs(0);
  for (int i = 0; i < n; i++) {
    int green_in_path = dis[i] - red[i];
    int red_in_subtree = tot_red - red[i];
    int invert = green_in_path + red_in_subtree;
    ans[i] = invert;
  }
  int minn = 1e7;
  int cnt = 0;
  for (int i = 0; i < n; i++) minn = min(minn, ans[i]);
  cout << minn;
  cout << "\n";
  for (int i = 0; i < n; i++)
    if (ans[i] == minn) cout << i + 1 << " ";
  cout << "\n";
  ;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  for (int i = 0; i < t; i++) solve(i);
  return 0;
}
