#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 100000;
const int MAXLOG = 18;
int n, m;
vector<pair<int,int>> adj[MAXN+1];
int parent_[MAXN+1], depth[MAXN+1];
int up[MAXN+1][MAXLOG];
int tin[MAXN+1], tout[MAXN+1], timer = 0;
ll net[MAXN+1]; // your “difference” array
ll res[MAXN+1];
void dfs1(int u, int p, int d){
parent_[u] = p;
depth[u] = d;
tin[u] = ++timer;
for(auto &e: adj[u]){
int v = e.first;
if(v == p) continue;
dfs1(v, u, d+1);
}
tout[u] = timer;
}
int lca(int a, int b){
if(depth[a] < depth[b]) swap(a,b);
int diff = depth[a] - depth[b];
for(int j = 0; j < MAXLOG; j++){
if(diff & (1<<j)) a = up[a][j];
}
if(a == b) return a;
for(int j = MAXLOG-1; j >= 0; j--){
if(up[a][j] != up[b][j]){
a = up[a][j];
b = up[b][j];
}
}
return parent_[a];
}
// the second DFS to accumulate your net[] into res[] along the tree
void dfs2(int u, int p, ll acc){
acc += net[u];
for(auto &e: adj[u]){
int v = e.first, idx = e.second;
if(v == p) continue;
res[idx] = acc;
dfs2(v, u, acc);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i = 0; i < n-1; i++){
int a,b;
cin >> a >> b;
adj[a].push_back({b,i});
adj[b].push_back({a,i});
}
// 1) Root at 1, get parent_ and depth and tin/tout
dfs1(1, 0, 0);
// 2) Build up[v][j]
for(int v = 1; v <= n; v++){
up[v][0] = parent_[v];
}
for(int j = 1; j < MAXLOG; j++){
for(int v = 1; v <= n; v++){
int w = up[v][j-1];
up[v][j] = w ? up[w][j-1] : 0;
}
}
// 3) Read m queries and do the net[] difference trick
cin >> m;
while(m--){
int a,b;
cin >> a >> b;
int c = lca(a,b);
net[c]++;
if(c==a) {
net[b]--;
} else if(c==b){
net[a]--;
} else {
net[a]--;
net[b]--;
}
}
// 4) Propagate net[] to res[] via dfs2
dfs2(1,0,0LL);
// 5) Output the edge results
for(int i = 0; i < n-1; i++){
cout << res[i] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE1BWE4gICA9IDEwMDAwMDsKY29uc3QgaW50IE1BWExPRyA9IDE4OwoKaW50IG4sIG07CnZlY3RvcjxwYWlyPGludCxpbnQ+PiBhZGpbTUFYTisxXTsKaW50IHBhcmVudF9bTUFYTisxXSwgZGVwdGhbTUFYTisxXTsKaW50IHVwW01BWE4rMV1bTUFYTE9HXTsKaW50IHRpbltNQVhOKzFdLCB0b3V0W01BWE4rMV0sIHRpbWVyID0gMDsKCmxsIG5ldFtNQVhOKzFdOyAgICAvLyB5b3VyIOKAnGRpZmZlcmVuY2XigJ0gYXJyYXkKbGwgcmVzW01BWE4rMV07Cgp2b2lkIGRmczEoaW50IHUsIGludCBwLCBpbnQgZCl7CiAgICBwYXJlbnRfW3VdID0gcDsKICAgIGRlcHRoW3VdICA9IGQ7CiAgICB0aW5bdV0gICAgPSArK3RpbWVyOwogICAgZm9yKGF1dG8gJmU6IGFkalt1XSl7CiAgICAgICAgaW50IHYgPSBlLmZpcnN0OwogICAgICAgIGlmKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgZGZzMSh2LCB1LCBkKzEpOwogICAgfQogICAgdG91dFt1XSA9IHRpbWVyOwp9CgppbnQgbGNhKGludCBhLCBpbnQgYil7CiAgICBpZihkZXB0aFthXSA8IGRlcHRoW2JdKSBzd2FwKGEsYik7CiAgICBpbnQgZGlmZiA9IGRlcHRoW2FdIC0gZGVwdGhbYl07CiAgICBmb3IoaW50IGogPSAwOyBqIDwgTUFYTE9HOyBqKyspewogICAgICAgIGlmKGRpZmYgJiAoMTw8aikpIGEgPSB1cFthXVtqXTsKICAgIH0KICAgIGlmKGEgPT0gYikgcmV0dXJuIGE7CiAgICBmb3IoaW50IGogPSBNQVhMT0ctMTsgaiA+PSAwOyBqLS0pewogICAgICAgIGlmKHVwW2FdW2pdICE9IHVwW2JdW2pdKXsKICAgICAgICAgICAgYSA9IHVwW2FdW2pdOwogICAgICAgICAgICBiID0gdXBbYl1bal07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcmVudF9bYV07Cn0KCi8vIHRoZSBzZWNvbmQgREZTIHRvIGFjY3VtdWxhdGUgeW91ciBuZXRbXSBpbnRvIHJlc1tdIGFsb25nIHRoZSB0cmVlCnZvaWQgZGZzMihpbnQgdSwgaW50IHAsIGxsIGFjYyl7CiAgICBhY2MgKz0gbmV0W3VdOwogICAgZm9yKGF1dG8gJmU6IGFkalt1XSl7CiAgICAgICAgaW50IHYgPSBlLmZpcnN0LCBpZHggPSBlLnNlY29uZDsKICAgICAgICBpZih2ID09IHApIGNvbnRpbnVlOwogICAgICAgIHJlc1tpZHhdID0gYWNjOwogICAgICAgIGRmczIodiwgdSwgYWNjKTsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspewogICAgICAgIGludCBhLGI7CiAgICAgICAgY2luID4+IGEgPj4gYjsKICAgICAgICBhZGpbYV0ucHVzaF9iYWNrKHtiLGl9KTsKICAgICAgICBhZGpbYl0ucHVzaF9iYWNrKHthLGl9KTsKICAgIH0KCiAgICAvLyAxKSBSb290IGF0IDEsIGdldCBwYXJlbnRfIGFuZCBkZXB0aCBhbmQgdGluL3RvdXQKICAgIGRmczEoMSwgMCwgMCk7CgogICAgLy8gMikgQnVpbGQgdXBbdl1bal0KICAgIGZvcihpbnQgdiA9IDE7IHYgPD0gbjsgdisrKXsKICAgICAgICB1cFt2XVswXSA9IHBhcmVudF9bdl07CiAgICB9CiAgICBmb3IoaW50IGogPSAxOyBqIDwgTUFYTE9HOyBqKyspewogICAgICAgIGZvcihpbnQgdiA9IDE7IHYgPD0gbjsgdisrKXsKICAgICAgICAgICAgaW50IHcgPSB1cFt2XVtqLTFdOwogICAgICAgICAgICB1cFt2XVtqXSA9IHcgPyB1cFt3XVtqLTFdIDogMDsKICAgICAgICB9CiAgICB9CgogICAgLy8gMykgUmVhZCBtIHF1ZXJpZXMgYW5kIGRvIHRoZSBuZXRbXSBkaWZmZXJlbmNlIHRyaWNrCiAgICBjaW4gPj4gbTsKICAgIHdoaWxlKG0tLSl7CiAgICAgICAgaW50IGEsYjsKICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgIGludCBjID0gbGNhKGEsYik7CiAgICAgICAgbmV0W2NdKys7CiAgICAgICAgaWYoYz09YSkgewogICAgICAgICAgICBuZXRbYl0tLTsKICAgICAgICB9IGVsc2UgaWYoYz09Yil7CiAgICAgICAgICAgIG5ldFthXS0tOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ldFthXS0tOwogICAgICAgICAgICBuZXRbYl0tLTsKICAgICAgICB9CiAgICB9CgogICAgLy8gNCkgUHJvcGFnYXRlIG5ldFtdIHRvIHJlc1tdIHZpYSBkZnMyCiAgICBkZnMyKDEsMCwwTEwpOwoKICAgIC8vIDUpIE91dHB1dCB0aGUgZWRnZSByZXN1bHRzCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspewogICAgICAgIGNvdXQgPDwgcmVzW2ldIDw8ICJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=