func_code_string: #include <bits/stdc++.h>   #pragma GCC diagnostic ignored  -Wunused-result    #pragma GCC diagnostic ignored  -Wunused-function    using namespace std;   namespace {   namespace shik {   template <class T>   void _R(T &x) {     cin >> x;   }   void _R(int &x) { scanf( %d , &x); }   void _R(int64_t &x) { scanf( %  SCNd64, &x); }   void _R(double &x) { scanf( %lf , &x); }   void _R(char &x) { scanf(  %c , &x); }   void _R(char *x) { scanf( %s , x); }   void R() {}   template <class T, class... U>   void R(T &head, U &...tail) {     _R(head);     R(tail...);   }   template <class T>   void _W(const T &x) {     cout << x;   }   void _W(const int &x) { printf( %d , x); }   void _W(const int64_t &x) { printf( %  PRId64, x); }   void _W(const double &x) { printf( %.16f , x); }   void _W(const char &x) { putchar(x); }   void _W(const char *x) { printf( %s , x); }   template <class T>   void _W(const vector<T> &x) {     for (auto i = x.begin(); i != x.end(); _W(*i++))       if (i != x.cbegin()) putchar(   );   }   void W() {}   template <class T, class... U>   void W(const T &head, const U &...tail) {     _W(head);     putchar(sizeof...(tail) ?     :   n );     W(tail...);   }   template <class T, class F = less<T>>   void sort_uniq(vector<T> &v, F f = F()) {     sort(begin(v), end(v), f);     v.resize(unique(begin(v), end(v)) - begin(v));   }   template <class T>   inline T bit(T x, int i) {     return (x >> i) & 1;   }   template <class T>   inline bool chkmax(T &a, const T &b) {     return b > a ? a = b, true : false;   }   template <class T>   inline bool chkmin(T &a, const T &b) {     return b < a ? a = b, true : false;   }   template <class T>   using MaxHeap = priority_queue<T>;   template <class T>   using MinHeap = priority_queue<T, vector<T>, greater<T>>;   const int N = 1e5 + 10;   int n, k;   vector<int> e[N];   void make_tree(int p) {     for (int i : e[p]) {       e[i].erase(find(begin(e[i]), end(e[i]), p));       make_tree(i);     }   }   pair<int, int> go(int p) {     int s = 0, r = 0, a1 = 0, a2 = 0;     for (int i : e[p]) {       auto t = go(i);       s += t.first;       int x = t.second;       if (x >= a1) {         a2 = a1;         a1 = x;       } else if (x >= a2) {         a2 = x;       }     }     if (a1 + a2 + 1 >= k) {       s++;     } else {       r = a1 + 1;     }     return {s, r};   }   int shik(int _k) {     k = _k;     return go(1).first;   }   int ans[N];   void solve(int l, int r, int al, int ar) {     if (r - l <= 1) return;     if (al == ar) {       for (int i = (l); i <= int(r); i++) ans[i] = al;       return;     }     int m = (l + r) / 2;     int am = shik(m);     ans[m] = am;     solve(l, m, al, am);     solve(m, r, am, ar);   }   void main() {     R(n);     for (int i = 0; i < int(n - 1); i++) {       int a, b;       R(a, b);       e[a].push_back(b);       e[b].push_back(a);     }     make_tree(1);     ans[1] = n;     solve(1, n + 1, n, 0);     for (int i = (1); i <= int(n); i++) W(ans[i]);   }   }  // namespace shik   }  // namespace   int main() {     shik::main();     return 0;   }   