#include <bits/stdc++.h>
using namespace std;
struct BIT {
int n;
vector<long long> f;
BIT() {}
BIT(int n): n(n), f(n+2,0) {}
void add1(int i, long long v){ for(; i<=n; i+=i&-i) f[i]+=v; }
void range_add(int l,int r,long long v){
if(l>r) return;
add1(l,v);
add1(r+1,-v);
}
long long sum(int i){ long long s=0; for(; i>0; i-=i&-i) s+=f[i]; return s; }
};
int n;
vector<vector<int>> g1, g2;
struct Info {
vector<int> tin, tout, sz, par;
vector<vector<int>> children;
int timer=0;
};
void dfs_build(int u, int p, vector<vector<int>>& g, Info& I){
I.par[u]=p;
I.tin[u]=++I.timer;
I.sz[u]=1;
for(int v: g[u]) if(v!=p){
I.children[u].push_back(v);
dfs_build(v,u,g,I);
I.sz[u]+=I.sz[v];
}
I.tout[u]=I.timer;
}
struct Op { int y1,y2; int d; };
vector<vector<Op>> eventsX;
inline void addRect(int Lx,int Rx,int Ly,int Ry,int delta){
if(Lx>Rx || Ly>Ry) return;
eventsX[Lx].push_back({Ly,Ry,delta});
eventsX[Rx+1].push_back({Ly,Ry,-delta});
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
if(!(cin>>n)) return 0;
g1.assign(n+1,{}); g2.assign(n+1,{});
for(int i=0;i<n-1;i++){ int u,v; cin>>u>>v; g1[u].push_back(v); g1[v].push_back(u); }
for(int i=0;i<n-1;i++){ int u,v; cin>>u>>v; g2[u].push_back(v); g2[v].push_back(u); }
Info A,B;
A.tin.assign(n+1,0); A.tout.assign(n+1,0); A.sz.assign(n+1,0); A.par.assign(n+1,0); A.children.assign(n+1,{});
B.tin.assign(n+1,0); B.tout.assign(n+1,0); B.sz.assign(n+1,0); B.par.assign(n+1,0); B.children.assign(n+1,{});
dfs_build(1,0,g1,A);
dfs_build(1,0,g2,B);
eventsX.assign(n+3,{});
for(int x=1;x<=n;x++){
if(A.sz[x]>B.sz[x]){
addRect(1,A.tin[x]-1,1,B.tin[x]-1,1);
addRect(1,A.tin[x]-1,B.tout[x]+1,n,1);
addRect(A.tout[x]+1,n,1,B.tin[x]-1,1);
addRect(A.tout[x]+1,n,B.tout[x]+1,n,1);
}
}
for(int x=1;x<=n;x++){
int thr = n - B.sz[x];
for(int c: A.children[x]){
if(A.sz[c] < thr){
addRect(A.tin[c],A.tout[c],1,B.tin[x]-1,1);
addRect(A.tin[c],A.tout[c],B.tout[x]+1,n,1);
}
}
}
for(int x=1;x<=n;x++){
int thr2 = n - A.sz[x];
for(int c: B.children[x]){
if(B.sz[c] > thr2){
addRect(1,A.tin[x]-1,B.tin[c],B.tout[c],1);
addRect(A.tout[x]+1,n,B.tin[c],B.tout[c],1);
}
}
}
for(int x=1;x<=n;x++){
auto &c1 = A.children[x];
auto &c2 = B.children[x];
if(c1.empty() || c2.empty()) continue;
vector<int> o1=c1, o2=c2;
sort(o1.begin(),o1.end(),[&](int u,int v){ return A.sz[u]<A.sz[v]; });
sort(o2.begin(),o2.end(),[&](int u,int v){ return B.sz[u]<B.sz[v]; });
if(o1.size()<=o2.size()){
for(int u: o1){
int s=A.sz[u];
int j = upper_bound(o2.begin(),o2.end(),s,[&](int val,int node){ return val < B.sz[node]; }) - o2.begin();
for(int k=j;k<(int)o2.size();k++){
int v=o2[k];
addRect(A.tin[u],A.tout[u],B.tin[v],B.tout[v],1);
}
}
}else{
for(int v: o2){
int t=B.sz[v];
int i = lower_bound(o1.begin(),o1.end(),t,[&](int node,int val){ return A.sz[node] < val; }) - o1.begin();
for(int k=i;k<(int)o1.size();k++){
int u=o1[k];
addRect(A.tin[u],A.tout[u],B.tin[v],B.tout[v],1);
}
}
}
}
BIT bit(n+2);
vector<long long> ans(n+1,0);
vector<int> invTin1(n+1,0);
for(int v=1;v<=n;v++) invTin1[A.tin[v]]=v;
for(int X=1; X<=n; X++){
for(auto &e: eventsX[X]) bit.range_add(e.y1,e.y2,e.d);
int v = invTin1[X];
ans[v]=bit.sum(B.tin[v]);
}
for(int v=1;v<=n;v++){
if(v>1) cout<<' ';
cout<<ans[v];
}
cout<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgQklUIHsKICAgIGludCBuOwogICAgdmVjdG9yPGxvbmcgbG9uZz4gZjsKICAgIEJJVCgpIHt9CiAgICBCSVQoaW50IG4pOiBuKG4pLCBmKG4rMiwwKSB7fQogICAgdm9pZCBhZGQxKGludCBpLCBsb25nIGxvbmcgdil7IGZvcig7IGk8PW47IGkrPWkmLWkpIGZbaV0rPXY7IH0KICAgIHZvaWQgcmFuZ2VfYWRkKGludCBsLGludCByLGxvbmcgbG9uZyB2KXsKICAgICAgICBpZihsPnIpIHJldHVybjsKICAgICAgICBhZGQxKGwsdik7CiAgICAgICAgYWRkMShyKzEsLXYpOwogICAgfQogICAgbG9uZyBsb25nIHN1bShpbnQgaSl7IGxvbmcgbG9uZyBzPTA7IGZvcig7IGk+MDsgaS09aSYtaSkgcys9ZltpXTsgcmV0dXJuIHM7IH0KfTsKCmludCBuOwp2ZWN0b3I8dmVjdG9yPGludD4+IGcxLCBnMjsKCnN0cnVjdCBJbmZvIHsKICAgIHZlY3RvcjxpbnQ+IHRpbiwgdG91dCwgc3osIHBhcjsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gY2hpbGRyZW47CiAgICBpbnQgdGltZXI9MDsKfTsKCnZvaWQgZGZzX2J1aWxkKGludCB1LCBpbnQgcCwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgZywgSW5mbyYgSSl7CiAgICBJLnBhclt1XT1wOwogICAgSS50aW5bdV09KytJLnRpbWVyOwogICAgSS5zelt1XT0xOwogICAgZm9yKGludCB2OiBnW3VdKSBpZih2IT1wKXsKICAgICAgICBJLmNoaWxkcmVuW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBkZnNfYnVpbGQodix1LGcsSSk7CiAgICAgICAgSS5zelt1XSs9SS5zelt2XTsKICAgIH0KICAgIEkudG91dFt1XT1JLnRpbWVyOwp9CgpzdHJ1Y3QgT3AgeyBpbnQgeTEseTI7IGludCBkOyB9Owp2ZWN0b3I8dmVjdG9yPE9wPj4gZXZlbnRzWDsKCmlubGluZSB2b2lkIGFkZFJlY3QoaW50IEx4LGludCBSeCxpbnQgTHksaW50IFJ5LGludCBkZWx0YSl7CiAgICBpZihMeD5SeCB8fCBMeT5SeSkgcmV0dXJuOwogICAgZXZlbnRzWFtMeF0ucHVzaF9iYWNrKHtMeSxSeSxkZWx0YX0pOwogICAgZXZlbnRzWFtSeCsxXS5wdXNoX2JhY2soe0x5LFJ5LC1kZWx0YX0pOwp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGlmKCEoY2luPj5uKSkgcmV0dXJuIDA7CiAgICBnMS5hc3NpZ24obisxLHt9KTsgZzIuYXNzaWduKG4rMSx7fSk7CiAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspeyBpbnQgdSx2OyBjaW4+PnU+PnY7IGcxW3VdLnB1c2hfYmFjayh2KTsgZzFbdl0ucHVzaF9iYWNrKHUpOyB9CiAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspeyBpbnQgdSx2OyBjaW4+PnU+PnY7IGcyW3VdLnB1c2hfYmFjayh2KTsgZzJbdl0ucHVzaF9iYWNrKHUpOyB9CgogICAgSW5mbyBBLEI7CiAgICBBLnRpbi5hc3NpZ24obisxLDApOyBBLnRvdXQuYXNzaWduKG4rMSwwKTsgQS5zei5hc3NpZ24obisxLDApOyBBLnBhci5hc3NpZ24obisxLDApOyBBLmNoaWxkcmVuLmFzc2lnbihuKzEse30pOwogICAgQi50aW4uYXNzaWduKG4rMSwwKTsgQi50b3V0LmFzc2lnbihuKzEsMCk7IEIuc3ouYXNzaWduKG4rMSwwKTsgQi5wYXIuYXNzaWduKG4rMSwwKTsgQi5jaGlsZHJlbi5hc3NpZ24obisxLHt9KTsKCiAgICBkZnNfYnVpbGQoMSwwLGcxLEEpOwogICAgZGZzX2J1aWxkKDEsMCxnMixCKTsKCiAgICBldmVudHNYLmFzc2lnbihuKzMse30pOwoKICAgIGZvcihpbnQgeD0xO3g8PW47eCsrKXsKICAgICAgICBpZihBLnN6W3hdPkIuc3pbeF0pewogICAgICAgICAgICBhZGRSZWN0KDEsQS50aW5beF0tMSwxLEIudGluW3hdLTEsMSk7CiAgICAgICAgICAgIGFkZFJlY3QoMSxBLnRpblt4XS0xLEIudG91dFt4XSsxLG4sMSk7CiAgICAgICAgICAgIGFkZFJlY3QoQS50b3V0W3hdKzEsbiwxLEIudGluW3hdLTEsMSk7CiAgICAgICAgICAgIGFkZFJlY3QoQS50b3V0W3hdKzEsbixCLnRvdXRbeF0rMSxuLDEpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IHg9MTt4PD1uO3grKyl7CiAgICAgICAgaW50IHRociA9IG4gLSBCLnN6W3hdOwogICAgICAgIGZvcihpbnQgYzogQS5jaGlsZHJlblt4XSl7CiAgICAgICAgICAgIGlmKEEuc3pbY10gPCB0aHIpewogICAgICAgICAgICAgICAgYWRkUmVjdChBLnRpbltjXSxBLnRvdXRbY10sMSxCLnRpblt4XS0xLDEpOwogICAgICAgICAgICAgICAgYWRkUmVjdChBLnRpbltjXSxBLnRvdXRbY10sQi50b3V0W3hdKzEsbiwxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IHg9MTt4PD1uO3grKyl7CiAgICAgICAgaW50IHRocjIgPSBuIC0gQS5zelt4XTsKICAgICAgICBmb3IoaW50IGM6IEIuY2hpbGRyZW5beF0pewogICAgICAgICAgICBpZihCLnN6W2NdID4gdGhyMil7CiAgICAgICAgICAgICAgICBhZGRSZWN0KDEsQS50aW5beF0tMSxCLnRpbltjXSxCLnRvdXRbY10sMSk7CiAgICAgICAgICAgICAgICBhZGRSZWN0KEEudG91dFt4XSsxLG4sQi50aW5bY10sQi50b3V0W2NdLDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgeD0xO3g8PW47eCsrKXsKICAgICAgICBhdXRvICZjMSA9IEEuY2hpbGRyZW5beF07CiAgICAgICAgYXV0byAmYzIgPSBCLmNoaWxkcmVuW3hdOwogICAgICAgIGlmKGMxLmVtcHR5KCkgfHwgYzIuZW1wdHkoKSkgY29udGludWU7CiAgICAgICAgdmVjdG9yPGludD4gbzE9YzEsIG8yPWMyOwogICAgICAgIHNvcnQobzEuYmVnaW4oKSxvMS5lbmQoKSxbJl0oaW50IHUsaW50IHYpeyByZXR1cm4gQS5zelt1XTxBLnN6W3ZdOyB9KTsKICAgICAgICBzb3J0KG8yLmJlZ2luKCksbzIuZW5kKCksWyZdKGludCB1LGludCB2KXsgcmV0dXJuIEIuc3pbdV08Qi5zelt2XTsgfSk7CiAgICAgICAgaWYobzEuc2l6ZSgpPD1vMi5zaXplKCkpewogICAgICAgICAgICBmb3IoaW50IHU6IG8xKXsKICAgICAgICAgICAgICAgIGludCBzPUEuc3pbdV07CiAgICAgICAgICAgICAgICBpbnQgaiA9IHVwcGVyX2JvdW5kKG8yLmJlZ2luKCksbzIuZW5kKCkscyxbJl0oaW50IHZhbCxpbnQgbm9kZSl7IHJldHVybiB2YWwgPCBCLnN6W25vZGVdOyB9KSAtIG8yLmJlZ2luKCk7CiAgICAgICAgICAgICAgICBmb3IoaW50IGs9ajtrPChpbnQpbzIuc2l6ZSgpO2srKyl7CiAgICAgICAgICAgICAgICAgICAgaW50IHY9bzJba107CiAgICAgICAgICAgICAgICAgICAgYWRkUmVjdChBLnRpblt1XSxBLnRvdXRbdV0sQi50aW5bdl0sQi50b3V0W3ZdLDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGZvcihpbnQgdjogbzIpewogICAgICAgICAgICAgICAgaW50IHQ9Qi5zelt2XTsKICAgICAgICAgICAgICAgIGludCBpID0gbG93ZXJfYm91bmQobzEuYmVnaW4oKSxvMS5lbmQoKSx0LFsmXShpbnQgbm9kZSxpbnQgdmFsKXsgcmV0dXJuIEEuc3pbbm9kZV0gPCB2YWw7IH0pIC0gbzEuYmVnaW4oKTsKICAgICAgICAgICAgICAgIGZvcihpbnQgaz1pO2s8KGludClvMS5zaXplKCk7aysrKXsKICAgICAgICAgICAgICAgICAgICBpbnQgdT1vMVtrXTsKICAgICAgICAgICAgICAgICAgICBhZGRSZWN0KEEudGluW3VdLEEudG91dFt1XSxCLnRpblt2XSxCLnRvdXRbdl0sMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgQklUIGJpdChuKzIpOwogICAgdmVjdG9yPGxvbmcgbG9uZz4gYW5zKG4rMSwwKTsKICAgIHZlY3RvcjxpbnQ+IGludlRpbjEobisxLDApOwogICAgZm9yKGludCB2PTE7djw9bjt2KyspIGludlRpbjFbQS50aW5bdl1dPXY7CgogICAgZm9yKGludCBYPTE7IFg8PW47IFgrKyl7CiAgICAgICAgZm9yKGF1dG8gJmU6IGV2ZW50c1hbWF0pIGJpdC5yYW5nZV9hZGQoZS55MSxlLnkyLGUuZCk7CiAgICAgICAgaW50IHYgPSBpbnZUaW4xW1hdOwogICAgICAgIGFuc1t2XT1iaXQuc3VtKEIudGluW3ZdKTsKICAgIH0KCiAgICBmb3IoaW50IHY9MTt2PD1uO3YrKyl7CiAgICAgICAgaWYodj4xKSBjb3V0PDwnICc7CiAgICAgICAgY291dDw8YW5zW3ZdOwogICAgfQogICAgY291dDw8IlxuIjsKICAgIHJldHVybiAwOwp9Cg==