#include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC optimize( no-stack-protector )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( fast-math )   #pragma GCC target( sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native )   using namespace std;   int a, b, c, d, e, f, p = 1000000007, base = 157, mi = 1e9, id = 0, q, pos;   int ind[300000], ans[300000], si[300000], si2[300000];   pair<int, int> reb_price[300000];   string s, s2;   vector<int> vec[300000];   vector<pair<int, int>> rebra[300000];   vector<int> order;   void dfs() {     for (auto v : order) {       int ma = 0, ma2 = 0;       si[v] = 1;       for (auto i : rebra[v]) {         if (i.second == 0) {           continue;         }         b += (si[i.first] + i.second - 1) / id;         si[i.first] = (si[i.first] + i.second - 1) % id;         if (si[i.first] > ma) {           ma2 = ma;           ma = si[i.first];         } else if (si[i.first] > ma2) {           ma2 = si[i.first];         }       }       si[v] = ma + 1;       if (si[v] + ma2 >= id) {         si[v] = 0;         b++;       }     }   }   pair<int, int> dfs2(int v, int pred, int pred2) {     if (rebra[v].size() == 1 && v != 1) {       rebra[v][0] = {pred2, 0};       order.push_back(v);       return {v, 1};     }     if (rebra[v].size() == 2 && v != 1) {       if (rebra[v][0].first == pred) {         auto pa = dfs2(rebra[v][1].first, v, pred2);         return {pa.first, pa.second + 1};       } else {         auto pa = dfs2(rebra[v][0].first, v, pred2);         return {pa.first, pa.second + 1};       }     }     int j = 0;     for (auto i : rebra[v]) {       if (i.first == pred) {         rebra[v][j] = {pred2, 0};         j++;         continue;       }       rebra[v][j] = dfs2(i.first, v, v);       j++;     }     order.push_back(v);     return {v, 1};   }   int readint() {     int n = 0;     char c;     do {       c = fgetc(stdin);     } while (!(c ==  -  ||  0  <= c && c <=  9 ));     int sign = 1;     if (c ==  - ) {       sign = -1;       c = fgetc(stdin);     }     do {       n = n * 10 + (c -  0 );       c = fgetc(stdin);     } while ( 0  <= c && c <=  9 );     return n * sign;   }   signed main() {     cin.tie(NULL);     cout.tie(NULL);     ios_base::sync_with_stdio(false);     mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());     auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();     a = readint();     for (int i = 0; i < a - 1; i++) {       b = readint();       c = readint();       rebra[b].push_back({c, 1});       rebra[c].push_back({b, 1});     }     dfs2(1, -1, -1);     for (int i = 0; i < a; i = i) {       if (i == 0 || i < 500) {         b = 0;         id = i + 1;         dfs();         cout << b <<   n ;         ;         i++;       } else {         b = 0;         id = i + 1;         dfs();         c = b;         int l = i + 1, r = a / max(b, 1) + 1;         b = 0;         while (r - l > 1) {           int res = (r + l) / 2;           b = 0;           id = res;           dfs();           if (b == c) {             l = res;           } else {             r = res;           }         }         for (int j = i; j < l; j++) {           cout << c <<   n ;           ;         }         i = l;       }     }     cin >> a;     return 0;   }