#include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector> edge(N),siz(N),Graph(N); vector> UV(N-1,{-1,-1}); for(int i=0; i> k; siz.at(k).push_back(i); while(k--){ int v; cin >> v,v--; edge.at(i).push_back(v); if(UV.at(v).first == -1) UV.at(v).first = i; else UV.at(v).second = i; } } for(int i=0; i answer(N); vector ok(N),ok2,look(N,N); for(int s=N-1; s>0; s--){ for(auto pos : siz.at(s)){ ok.at(pos) = 1; for(auto to : edge.at(pos)){ if(ok.at(to)) Graph.at(pos).push_back(to),Graph.at(to).push_back(pos); } ok2.push_back(pos); } int ans = 0; auto dfs = [&](auto dfs,int pos,int back) -> bool { look.at(pos) = s; bool ret = true; if(back == -1) ret = false; int use = edge.at(pos).size()-Graph.at(pos).size(); for(auto to : Graph.at(pos)){ if(to == back) continue; if(dfs(dfs,to,pos)) use++; } if(use >= s) ans++; else if(use+ret >= s) ans++,ret = false; return ret; }; for(auto root : ok2){ if(look.at(root) == s) continue; dfs(dfs,root,-1); } answer.at(s) = ans; } answer.erase(answer.begin()); for(auto a : answer) cout << a << " "; cout << "\n"; }