//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "o"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
//#define pb push_back
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r)
{
return uniform_int_distribution<ll> (l, r)(rng);
}
inline void rf()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if(fopen(file".inp","r"))
{
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const int mod=1e9+7;
const int maxn=1e5+15;
const ll inf=5e16;
template<typename T> inline void add(T &x, const T &y)
{
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
template<typename T> inline bool maxi(T &a, T b)
{
if(a>=b) return 0;
a=b; return 1;
}
template<typename T> inline bool mini(T &a, T b)
{
if(a<=b) return 0;
a=b; return 1;
}
int n, ans[maxn];
vi g[2][maxn];
pii e[2][maxn];
int st[2][maxn], ed[2][maxn], timer[2], tour[2][maxn];
int sz[2][maxn], h[2][maxn], heavy[2][maxn];
struct fenwick
{
int t[maxn];
inline void upd(int x, int val)
{
for(; x<=n; x+=x&-x) t[x]+=val;
}
inline int get(int x)
{
int ans=0;
for(; x>0; x-=x&-x) ans+=t[x];
return ans;
}
} t;
void dfs(int u, int par, int id)
{
sz[id][u]=1;
int mx=0;
heavy[id][u]=0; // *** khởi lại heavy ***
st[id][u]=++timer[id]; tour[id][timer[id]]=u;
for(auto v:g[id][u]) if(v!=par)
{
h[id][v]=h[id][u]+1;
dfs(v, u, id);
if(maxi(mx, sz[id][v])) heavy[id][u]=v;
sz[id][u]+=sz[id][v];
}
ed[id][u]=timer[id];
}
void sack(int id, int u, int par, bool keep)
{
for(auto v:g[id][u]) if(v!=par && v!=heavy[id][u]) sack(id, v, u, 0);
if(heavy[id][u]) sack(id, heavy[id][u], u, 1);
// add current root u
t.upd(st[1-id][u], 1);
// add all small-child subtrees
for(auto v:g[id][u]) if(v!=par && v!=heavy[id][u])
{
ff(i, st[id][v], ed[id][v])
{
int x=tour[id][i];
t.upd(st[1-id][x], 1);
}
}
// compute answers for all edges of the other tree (1-id)
ff(i, 1, n-1)
{
int u1=e[1-id][i].fi, v1=e[1-id][i].se;
if(h[1-id][u1]<h[1-id][v1]) swap(u1, v1); // u1 is deeper -> subtree root
int in = t.get(ed[1-id][u1]) - t.get(st[1-id][u1]-1);
int a = sz[id][u];
int c = sz[1-id][u1];
int v1c = in;
int v2c = a - in;
int v3c = c - in;
int v4c = n - a - c + in;
int cnt = max( max(v1c, v2c), max(v3c, v4c) );
++ans[cnt];
}
if(!keep)
{
ff(i, st[id][u], ed[id][u])
{
int v=tour[id][i];
t.upd(st[1-id][v], -1);
}
}
}
signed main()
{
rf();
cin>>n;
// clear globals (an toàn)
ms(timer, 0);
ms(ans, 0);
ff(id, 0, 1)
{
ff(i, 1, n) { g[id][i].clear(); st[id][i]=ed[id][i]=0; sz[id][i]=0; h[id][i]=0; heavy[id][i]=0; }
ff(i, 1, n-1)
{
int u, v; cin>>u>>v;
e[id][i]={u, v};
g[id][u].pb(v); g[id][v].pb(u);
}
dfs(1, 0, id);
}
ms(t.t, 0); // clear fenwick
sack(0, 1, 0, 1);
ff(i, 0, n) cout<<ans[i]<<ss;
re;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAibyIKI2RlZmluZSBmZihpLCBhLCBiKSBmb3IoYXV0byBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgZmZyKGksIGIsIGEpIGZvcihhdXRvIGk9KGIpOyBpPj0oYSk7IC0taSkKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgc3MgIiAiCi8vI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHN6KHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBhbGwocykgKHMpLmJlZ2luKCksIChzKS5lbmQoKQojZGVmaW5lIG1zKGEseCkgbWVtc2V0KGEsIHgsIHNpemVvZiAoYSkpCiNkZWZpbmUgY24gY29udGludWUKI2RlZmluZSByZSBleGl0KDApCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxwaWk+IHZwaWk7CnR5cGVkZWYgdmVjdG9yPHBsbD4gdnBsbDsKCm10MTk5MzdfNjQgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CmxsIHJhbihsbCBsLCBsbCByKQp7CiAgICByZXR1cm4gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGxsPiAobCwgcikocm5nKTsKfQoKaW5saW5lIHZvaWQgcmYoKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwogICAgaWYoZm9wZW4oZmlsZSIuaW5wIiwiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oZmlsZSIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oZmlsZSIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KfQoKY29uc3QgaW50IG1vZD0xZTkrNzsKY29uc3QgaW50IG1heG49MWU1KzE1Owpjb25zdCBsbCBpbmY9NWUxNjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChUICZ4LCBjb25zdCBUICZ5KQp7CiAgICB4Kz15OwogICAgaWYoeD49bW9kKSB4LT1tb2Q7CiAgICBpZih4PDApIHgrPW1vZDsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWF4aShUICZhLCBUIGIpCnsKICAgIGlmKGE+PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWluaShUICZhLCBUIGIpCnsKICAgIGlmKGE8PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKaW50IG4sIGFuc1ttYXhuXTsKdmkgZ1syXVttYXhuXTsKcGlpIGVbMl1bbWF4bl07CmludCBzdFsyXVttYXhuXSwgZWRbMl1bbWF4bl0sIHRpbWVyWzJdLCB0b3VyWzJdW21heG5dOwppbnQgc3pbMl1bbWF4bl0sIGhbMl1bbWF4bl0sIGhlYXZ5WzJdW21heG5dOwoKc3RydWN0IGZlbndpY2sKewogICAgaW50IHRbbWF4bl07CgogICAgaW5saW5lIHZvaWQgdXBkKGludCB4LCBpbnQgdmFsKQogICAgewogICAgICAgIGZvcig7IHg8PW47IHgrPXgmLXgpIHRbeF0rPXZhbDsKICAgIH0KCiAgICBpbmxpbmUgaW50IGdldChpbnQgeCkKICAgIHsKICAgICAgICBpbnQgYW5zPTA7CiAgICAgICAgZm9yKDsgeD4wOyB4LT14Ji14KSBhbnMrPXRbeF07CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KfSB0OwoKdm9pZCBkZnMoaW50IHUsIGludCBwYXIsIGludCBpZCkKewogICAgc3pbaWRdW3VdPTE7CiAgICBpbnQgbXg9MDsKICAgIGhlYXZ5W2lkXVt1XT0wOyAvLyAqKioga2jhu59pIGzhuqFpIGhlYXZ5ICoqKgogICAgc3RbaWRdW3VdPSsrdGltZXJbaWRdOyB0b3VyW2lkXVt0aW1lcltpZF1dPXU7CiAgICBmb3IoYXV0byB2OmdbaWRdW3VdKSBpZih2IT1wYXIpCiAgICB7CiAgICAgICAgaFtpZF1bdl09aFtpZF1bdV0rMTsKICAgICAgICBkZnModiwgdSwgaWQpOwogICAgICAgIGlmKG1heGkobXgsIHN6W2lkXVt2XSkpIGhlYXZ5W2lkXVt1XT12OwogICAgICAgIHN6W2lkXVt1XSs9c3pbaWRdW3ZdOwogICAgfQogICAgZWRbaWRdW3VdPXRpbWVyW2lkXTsKfQoKdm9pZCBzYWNrKGludCBpZCwgaW50IHUsIGludCBwYXIsIGJvb2wga2VlcCkKewogICAgZm9yKGF1dG8gdjpnW2lkXVt1XSkgaWYodiE9cGFyICYmIHYhPWhlYXZ5W2lkXVt1XSkgc2FjayhpZCwgdiwgdSwgMCk7CiAgICBpZihoZWF2eVtpZF1bdV0pIHNhY2soaWQsIGhlYXZ5W2lkXVt1XSwgdSwgMSk7CgogICAgLy8gYWRkIGN1cnJlbnQgcm9vdCB1CiAgICB0LnVwZChzdFsxLWlkXVt1XSwgMSk7CgogICAgLy8gYWRkIGFsbCBzbWFsbC1jaGlsZCBzdWJ0cmVlcwogICAgZm9yKGF1dG8gdjpnW2lkXVt1XSkgaWYodiE9cGFyICYmIHYhPWhlYXZ5W2lkXVt1XSkKICAgIHsKICAgICAgICBmZihpLCBzdFtpZF1bdl0sIGVkW2lkXVt2XSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB4PXRvdXJbaWRdW2ldOwogICAgICAgICAgICB0LnVwZChzdFsxLWlkXVt4XSwgMSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIGNvbXB1dGUgYW5zd2VycyBmb3IgYWxsIGVkZ2VzIG9mIHRoZSBvdGhlciB0cmVlICgxLWlkKQogICAgZmYoaSwgMSwgbi0xKQogICAgewogICAgICAgIGludCB1MT1lWzEtaWRdW2ldLmZpLCB2MT1lWzEtaWRdW2ldLnNlOwogICAgICAgIGlmKGhbMS1pZF1bdTFdPGhbMS1pZF1bdjFdKSBzd2FwKHUxLCB2MSk7IC8vIHUxIGlzIGRlZXBlciAtPiBzdWJ0cmVlIHJvb3QKCiAgICAgICAgaW50IGluID0gdC5nZXQoZWRbMS1pZF1bdTFdKSAtIHQuZ2V0KHN0WzEtaWRdW3UxXS0xKTsKICAgICAgICBpbnQgYSA9IHN6W2lkXVt1XTsKICAgICAgICBpbnQgYyA9IHN6WzEtaWRdW3UxXTsKCiAgICAgICAgaW50IHYxYyA9IGluOwogICAgICAgIGludCB2MmMgPSBhIC0gaW47CiAgICAgICAgaW50IHYzYyA9IGMgLSBpbjsKICAgICAgICBpbnQgdjRjID0gbiAtIGEgLSBjICsgaW47CiAgICAgICAgaW50IGNudCA9IG1heCggbWF4KHYxYywgdjJjKSwgbWF4KHYzYywgdjRjKSApOwogICAgICAgICsrYW5zW2NudF07CiAgICB9CgogICAgaWYoIWtlZXApCiAgICB7CiAgICAgICAgZmYoaSwgc3RbaWRdW3VdLCBlZFtpZF1bdV0pCiAgICAgICAgewogICAgICAgICAgICBpbnQgdj10b3VyW2lkXVtpXTsKICAgICAgICAgICAgdC51cGQoc3RbMS1pZF1bdl0sIC0xKTsKICAgICAgICB9CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkKewogICAgcmYoKTsKICAgIGNpbj4+bjsKICAgIC8vIGNsZWFyIGdsb2JhbHMgKGFuIHRvw6BuKQogICAgbXModGltZXIsIDApOwogICAgbXMoYW5zLCAwKTsKICAgIGZmKGlkLCAwLCAxKQogICAgewogICAgICAgIGZmKGksIDEsIG4pIHsgZ1tpZF1baV0uY2xlYXIoKTsgc3RbaWRdW2ldPWVkW2lkXVtpXT0wOyBzeltpZF1baV09MDsgaFtpZF1baV09MDsgaGVhdnlbaWRdW2ldPTA7IH0KICAgICAgICBmZihpLCAxLCBuLTEpCiAgICAgICAgewogICAgICAgICAgICBpbnQgdSwgdjsgY2luPj51Pj52OwogICAgICAgICAgICBlW2lkXVtpXT17dSwgdn07CiAgICAgICAgICAgIGdbaWRdW3VdLnBiKHYpOyBnW2lkXVt2XS5wYih1KTsKICAgICAgICB9CiAgICAgICAgZGZzKDEsIDAsIGlkKTsKICAgIH0KCiAgICBtcyh0LnQsIDApOyAvLyBjbGVhciBmZW53aWNrCiAgICBzYWNrKDAsIDEsIDAsIDEpOwogICAgZmYoaSwgMCwgbikgY291dDw8YW5zW2ldPDxzczsKICAgIHJlOwp9Cg==