#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
using namespace std;
#ifdef LOCAL
#include "C:\Users\Dell\Downloads\template\template\icpc-notebook\Utilities\debug.h"
#else
#define debug(...) 42
#endif
const int mn = 5e5 + 5, mod = 1e9 + 7, inf = 2e9;
int n, d[mn], up[mn][21], sz[mn], st[mn], ft[mn], timer_dfs = 0;
vector <int> a[mn];
void pre_dfs(int u, int p){
sz[u] = 1;
st[u] = ++ timer_dfs;
for(auto v : a[u]){
if(v == p) continue;
d[v] = d[u] + 1;
up[v][0] = u;
pre_dfs(v, u);
sz[u] += sz[v];
}
ft[u] = timer_dfs;
}
void build(){
for(int j = 1; (1 << j) <= n; j++){
for(int i = 1; i <= n; i++){
up[i][j] = up[up[i][j - 1]][j - 1];
}
}
}
int lca(int u, int v){
if(d[u] < d[v]) swap(u, v);
int kc = d[u] - d[v];
for(int i = 20; i >= 0; i--) if(kc & (1 << i)) u = up[u][i];
if(u == v) return u;
for(int i = 20; i >= 0; i--){
if(up[u][i] != up[v][i]){
u = up[u][i], v = up[v][i];
}
}
return up[u][0];
}
int jump(int u, int v){
int kc = d[v] - d[u] - 1;
for(int i = 20; i >= 0; i--) if(kc & (1 << i)) v = up[v][i];
return v;
}
int dist(int u, int v){
return d[u] + d[v] - 2 * d[lca(u, v)];
}
namespace sub1{
int ans[mn];
void backtrack(){
for(int mask = 0; mask < (1 << n); mask++){
vector <int> candidate;
for(int i = 0; i < n; i++){
if(mask & (1 << i)) candidate.push_back(i + 1);
}
int min_val = inf, cnt = 0;
for(int i = 1; i <= n; i++){
int sum = 0;
for(auto v : candidate) sum += dist(i, v);
if(min_val > sum) min_val = sum, cnt = 1;
else if(min_val == sum) cnt ++;
}
// debug(candidate, min_val, cnt);
int num = __builtin_popcount(mask);
ans[num] = max(ans[num], cnt);
}
for(int i = 1; i <= n; i++) cout << ans[i] << '\n';
}
}
namespace sub2{
int ans[mn];
void sol(){
fill(ans, ans + n + 1, 1);
for(int u = 1; u <= n; u++){
for(int v = 1; v <= n; v++){
if(d[u] < d[v] || (d[u] == d[v] && u != v)){
int cur_val;
if(st[u] <= st[v] && st[v] <= ft[u]) cur_val = min(sz[v], n - sz[jump(u, v)]);
else cur_val = min(sz[u], sz[v]);
ans[cur_val * 2] = max(ans[cur_val * 2], dist(u, v) + 1);
debug(cur_val * 2, u, v, lca(u, v), dist(u, v));
}
}
}
for(int i = n - n % 2; i; i -= 2) ans[i] = max(ans[i], ans[i + 2]);
for(int i = 1; i <= n; i++) cout << ans[i] << '\n';
}
}
void solve() {
cin >> n;
for(int i = 1; i < n; i++){
int u, v; cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
pre_dfs(1, 0); build();
// if(n <= 16) sub1::backtrack();
// else if (n <= 4000)
sub2::sol();
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
#define task "Kawabata"
if (fopen(task".INP", "r")) {
freopen(task".INP", "r", stdin);
freopen(task".OUT", "w", stdout);
}
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
// Don't wanna lose anymore T_T
// Never let me go - Kazuo Ishiguro