#include <bits/stdc++.h>
using namespace std;
const long long INFLL = 10000000000000010LL;
const long long INF = 2 * ((1 << 30) - 1) + 1, MOD = 100000000;
const long long MAXN = (2e5) + 5, MAXS = 2e5;
long long n, par[MAXN];
map<pair<long long, long long>, long long> m;
vector<long long> v[MAXN];
vector<pair<long long, long long> > ord, ans;
bool mark[MAXN] = {}, cc[MAXN] = {};
long long mi = INF;
void dfs(long long p, long long x, long long dis) {
  mark[x] = 1;
  par[x] = p;
  ord.push_back({dis, x});
  for (auto ver : v[x]) {
    if (!mark[ver]) {
      dfs(x, ver, dis + 1);
    }
  }
}
int32_t main() {
  std::ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  m.clear();
  cin >> n;
  for (long long i = 0; i < n - 1; i++) {
    long long aa, bb;
    cin >> aa >> bb;
    --aa, --bb;
    v[aa].push_back(bb), v[bb].push_back(aa);
    m[{aa, bb}] = bb;
    m[{bb, aa}] = bb;
  }
  dfs(-1, 0, 0);
  sort(ord.begin(), ord.end());
  for (long long ver = 1; ver < n; ver++) {
    if (m[{ver, par[ver]}] != ver) {
      cc[ver] = 1;
    }
  }
  long long dp[MAXN] = {}, pd[MAXN] = {};
  for (long long j = n - 1; j >= 0; j--) {
    long long ver = ord[j].second;
    for (auto adj : v[ver]) {
      if (adj != par[ver]) {
        dp[ver] += (dp[adj] + cc[adj]);
      }
    }
  }
  for (long long j = 1; j < n; j++) {
    long long ver = ord[j].second;
    pd[ver] = pd[par[ver]] + (!cc[ver]);
    pd[ver] += (dp[par[ver]] - (dp[ver] + cc[ver]));
  }
  for (long long i = 0; i < n; i++) {
    long long jj = (dp[i] + pd[i]);
    ans.push_back({jj, i + 1});
    mi = min(jj, mi);
  }
  cout << mi << '\n';
  sort(ans.begin(), ans.end());
  for (long long i = 0; i < n; i++) {
    if (ans[i].first > mi) break;
    cout << ans[i].second << ' ';
  }
}
