#include <bits/stdc++.h>
int dx[] = {0, -1, 0, 1, -1, 1, -1, 1};
int dy[] = {-1, 0, 1, 0, 1, -1, -1, 1};
const int N = 2e5 + 5, mod = 1e9 + 7;
using namespace std;
vector<int> g[N];
map<pair<int, int>, int> adj;
int r, w, ans;
pair<int, int> arr[N];
void dfs(int node, int par) {
  for (auto child : g[node]) {
    if (child != par) {
      if (adj.find({node, child}) != adj.end())
        r++;
      else
        w++;
      dfs(child, node);
    }
  }
}
void dfs2(int node, int par) {
  for (auto child : g[node]) {
    int curR = arr[node].first, curW = arr[node].second;
    if (child != par) {
      if (adj.find({node, child}) != adj.end())
        curR--, curW++;
      else
        curR++, curW--;
      ans = min(ans, curW);
      arr[child] = {curR, curW};
      dfs2(child, node);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
    adj[{u, v}] = 1;
  }
  dfs(1, 0);
  arr[1] = {r, w};
  ans = w;
  dfs2(1, 0);
  cout << ans << '\n';
  for (int i = 1; i <= n; i++)
    if (arr[i].second == ans) cout << i << ' ';
  return 0;
}
