// includes {{{ #include #include #include #include #include #include #include #include #include #include #include #include // #include // #include // #include // #include // #include // }}} using namespace std; using ll = long long; const int N = 1e5; vector< vector< int > > g(N); using Value = int; map< int, Value > dp[N]; // dp[i][j] := jを親としたときの, 部分木iがwinning何本と繋がっているか Value dfs(int i, int p, int f) { if(dp[i].count(p)) return dp[i][p]; int deg = g[i].size() - (p != -1); Value res = 0; if(f || p == -1) { // O(deg) // go only child for(int j : g[i]) if(j != p) { res += !dfs(j, i, f); } } else { // O(1) res = dfs(i, -1, f) - (!dfs(p, i, f)); } return dp[i][p] = res; } int n; int main() { std::ios::sync_with_stdio(false), std::cin.tie(0); cin >> n; for(int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; a--; b--; g[a].emplace_back(b); g[b].emplace_back(a); } dfs(0, -1, 1); vector v; for(int i = 0; i < n; i++) if(!dfs(i, -1, 0)) v.emplace_back(i); cout << v.size() << "\n"; for(int e : v) cout << e + 1 << "\n"; return 0; }