#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1<<18;
vector<int> nei[N];
vector<pair<int, pair<int, int>>> E;
int Par[N][20], ch[N], hei[N], L[N], R[N], pr[N], Ans[N], n;
void dfs(int u, int p){
Par[u][0] = p;
ch[u] = 1;
hei[u] = hei[p] + 1;
for (int i=0;i<17;i++)
Par[u][i+1] = Par[Par[u][i]][i];
for (int i : nei[u]){
if (i == p)
continue;
dfs(i, u);
ch[u] += ch[i];
E.push_back({min(ch[i], n - ch[i]), {i, u}});
}
}
int LCA(int u, int v){
if (hei[u] > hei[v])
swap(u, v);
for (int i=17;i + 1;i--){
if (hei[u] + (1<<i) <= hei[v])
v = Par[v][i];
}
for (int i=17;i + 1;i--){
if (Par[u][i] != Par[v][i])
u = Par[u][i], v = Par[v][i];
}
return hei[u] - (u != v);
}
int dist(int u, int v){
return hei[u] + hei[v] - 2 * LCA(u, v);
}
int root(int v){
return (pr[v] == 0 ? v : pr[v] = root(pr[v]));
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n;
for (int i=1;i<=n;i++)
L[i] = R[i] = i;
for (int i=1, a, b;i<n;i++){
cin>>a>>b;
nei[a].push_back(b);
nei[b].push_back(a);
}
dfs(1, 0);
sort(rbegin(E), rend(E));
for (auto [c, ab] : E){
int A = root(ab.first), B = root(ab.second), d = 0;
// cout<<A<<' '<<B<<' '<<endl;
vector<pair<int, int>> vc = {{L[A], R[A]}, {L[B], R[B]}, {L[A], R[B]}, {R[A], R[B]}, {L[A], L[B]}, {R[A], L[B]}};
pr[B] = A;
for (auto [u, v] : vc){
int x = dist(u, v);
// cout<<u<<' '<<v<<' '<<x<<endl;
if (x > d)
d = x, L[A] = u, R[A] = v;
}
Ans[c] = d;
}
for (int i=n; i; i--)
Ans[i] = max(Ans[i], Ans[i+1]);
for (int i=1;i<=n;i++){
if (i & 1)
cout<<"1\n";
else
cout<<Ans[i/2] + 1<<'\n';
}
}