#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "debug.h"
#else
#define debug(...) void(23)
#endif
template<typename T>
bool chmax(T& a, T b) {
if (a < b) {
a = b;
return true;
}
return false;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int N;
std::cin >> N;
if (N == 1) {
std::cout << "1\n";
return 0;
}
std::vector<int> U(N), V(N);
std::vector<std::vector<int>> adj(N);
for (int i = 1; i < N; ++i) {
std::cin >> U[i] >> V[i];
--U[i], --V[i];
adj[U[i]].emplace_back(i);
adj[V[i]].emplace_back(i);
}
std::vector<int> ans(N / 2 + 1, 1);
int cen;
[&] {
std::vector<int> siz(N, 1);
auto dfs = [&](auto&& self, int v, int pr) -> void {
for (auto e : adj[v]) {
int u = U[e] ^ V[e] ^ v;
if (u == pr) {
continue;
}
self(self, u, v);
siz[v] += siz[u];
}
};
dfs(dfs, 0, -1);
int v = 0, par = -1;
while (true) {
bool ch = false;
for (auto e : adj[v]) {
int u = U[e] ^ V[e] ^ v;
if (u == par) {
continue;
}
if (siz[u] * 2 > N) {
par = v;
v = u;
ch = true;
break;
}
}
if (!ch) {
break;
}
}
cen = v;
}();
std::vector<int> siz(N, 1), dep(N), par(N);
auto dfs = [&](auto&& self, int v) -> void {
for (auto e : adj[v]) {
int u = U[e] ^ V[e] ^ v;
if (u == par[v]) {
continue;
}
dep[u] = dep[v] + 1;
par[u] = v;
self(self, u);
chmax(ans[siz[u]], dep[u] + 1);
siz[v] += siz[u];
}
};
par[cen] = cen;
dfs(dfs, cen);
const int LG = std::__lg(N);
std::vector<std::vector<int>> lift(LG + 1, std::vector<int>(N));
for (int i = 0; i < N; ++i) {
lift[0][i] = par[i];
}
for (int i = 0; i < LG; ++i) {
for (int j = 0; j < N; ++j) {
lift[i + 1][j] = lift[i][lift[i][j]];
}
}
auto lca = [&](int u, int v) -> int {
if (dep[u] < dep[v]) {
std::swap(u, v);
}
for (int i = LG; i >= 0; --i) {
if (dep[u] - (1 << i) >= dep[v]) {
u = lift[i][u];
}
}
if (u == v) {
return u;
}
for (int i = LG; i >= 0; --i) {
if (lift[i][u] != lift[i][v]) {
u = lift[i][u];
v = lift[i][v];
}
}
return lift[0][u];
};
auto dist = [&](int a, int b) -> int {
return dep[a] + dep[b] - 2 * dep[lca(a, b)];
};
std::vector<std::vector<int>> all(N / 2 + 1);
for (int i = 0; i < N; ++i) {
if (i != cen) {
all[siz[i]].emplace_back(i);
}
}
int x = cen, y = cen;
for (int i = N / 2; i >= 1; --i) {
for (auto j : all[i]) {
if (dist(x, y) < dist(x, j)) {
std::swap(y, j);
}
if (dist(x, y) < dist(j, y)) {
std::swap(x, j);
}
}
chmax(ans[i], dist(x, y) + 1);
}
for (int i = 1; i <= N; ++i) {
if (i % 2 == 0) {
std::cout << ans[i / 2] << '\n';
} else {
std::cout << "1\n";
}
}
return 0;
}