#include using namespace std; const int maxn = 1e6 + 5; int n , x , y; vector> g[maxn]; vector>result; bool mark[maxn]; int d = 0; void set_mark_false(int n){ for (int i = 0; i < n ; i++) mark[i] = false; } void dfs(int u){ mark[u] = true; for (auto edge : g[u]){ int v = edge.first; int direction = edge.second; if (!mark[v] && !direction) d++; if (!mark[v]) dfs(v); } } void check (int u){ mark[u] = true; for (auto w : g[u]){ int v = w.first; int f = w.second; if (g[u] == ({v , 1}) && !mark[v]){ result[v] = make_pair(d+1 , v); mark[v] = true; } else if (g[u] == ({v , 0}) && !mark[v]) { result[v] = make_pair(d , v); mark[v] = true; } } } int main(){ cin >> n; result.resize(n); for (int i = 0 ; i < n - 1 ; i++){ cin >> x >> y; g[x - 1].push_back({y - 1, 1}); g[y - 1].push_back({x - 1, 0}); } dfs(0); result[0] = make_pair(d , 0); sort(result.begin(), result.end()); cout << result[0].first << endl; int min = result[0].first; int i = 0; bool sw = false; while (min == result[i].first){ if (sw) cout << " "; cout << result[i].second + 1; sw = true; i++; } cout << endl; }