#include <bits/stdc++.h>
using namespace std;
template <typename T>
using min_pq = priority_queue<T, vector<T>, greater<T>>;
template <typename T>
using max_pq = priority_queue<T>;
const int inf = 2e9 + 5;
const long long l_inf = 2e18 + 5;
const int mod_v = 1e9 + 7;
const int max_n = 1e5 + 5;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
template <typename T>
T gcd(T a, T b) {
  while (b) {
    T temp = a % b;
    a = b;
    b = temp;
  }
  return a;
}
template <typename T>
tuple<T, T, T> egcd(T a, T b) {
  T x1 = 1, x2 = 0, y1 = 0, y2 = 1;
  while (b) {
    T q = a / b, r = a % b;
    T new_x = x1 - q * x2, new_y = y1 - q * y2;
    x1 = x2, y1 = y2, x2 = new_x, y2 = new_y;
    a = b, b = r;
  }
  return make_tuple(a, x1, y1);
}
inline long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
template <typename T>
inline T mod(T a, T b = mod_v) {
  return (a % b + b) % b;
}
template <typename T>
inline T mod_inv(T a, T b = mod_v) {
  return mod(get<1>(egcd(a, b)), b);
}
template <typename T>
inline T sum(T a, T b, T m = mod_v) {
  return mod(mod(a, m) + mod(b, m), m);
}
template <typename T>
inline T difference(T a, T b, T m = mod_v) {
  return mod(mod(a, m) - mod(b, m), m);
}
inline long long product(long long a, long long b, long long m = mod_v) {
  return mod(mod(a, m) * mod(b, m), m);
}
inline long long quotient(long long a, long long b, long long m = mod_v) {
  return mod(mod(a, m) * mod_inv(b, m), m);
}
template <typename T, typename T2>
ostream &operator<<(ostream &s, const pair<T, T2> &p) {
  return s << p.first << ' ' << p.second << ' ';
}
template <typename T, typename T2>
istream &operator>>(istream &s, pair<T, T2> &p) {
  return s >> p.first >> p.second;
}
template <typename T>
ostream &operator<<(ostream &s, const vector<T> &v) {
  for (auto it : v) s << it << ' ';
  return s;
}
template <typename T>
istream &operator>>(istream &s, vector<T> &v) {
  for (auto it = (v).begin(), it_ = (v).end(); it != it_; ++it) s >> *it;
  return s;
}
template <typename T>
void read_range(T beg, T end) {
  while (beg != end) cin >> *beg++;
}
template <typename T>
void print_range(T beg, T end) {
  while (beg != end) cout << *beg++ << ' ';
}
struct reader {
  template <typename T>
  reader &operator,(T &v) {
    cin >> v;
    return *this;
  }
} rdr;
struct debugger {
  template <typename T>
  debugger &operator,(const T &v) {
    cerr << v << ", ";
    return *this;
  }
} dbg;
vector<int> adj[max_n];
vector<pair<int, int>> edges;
int e[2 * max_n], l[2 * max_n], h[max_n], st[2 * max_n][20], memo[max_n], idx,
    n, pr[max_n], ar[max_n];
void dfs(int u, int par) {
  pr[u] = par;
  e[++idx] = u;
  h[u] = idx;
  l[idx] = l[h[par]] + 1;
  for (int v : adj[u]) {
    if (v == par) continue;
    dfs(v, u);
    e[++idx] = u;
    l[idx] = l[h[par]] + 1;
  }
}
void init() {
  int sz = 2 * n - 1;
  for (int i = 1; i <= sz; ++i) st[i][0] = i;
  for (int j = 1; (1 << j) <= sz; ++j)
    for (int i = 1; i + (1 << j) - 1 <= sz; ++i)
      if (l[st[i][j - 1]] < l[st[i + (1 << (j - 1))][j - 1]])
        st[i][j] = st[i][j - 1];
      else
        st[i][j] = st[i + (1 << (j - 1))][j - 1];
}
int rmq(int i, int j) {
  if (i > j) swap(i, j);
  int k = floor(log(j - i + 1) / log(2));
  if (l[st[i][k]] < l[st[j - (1 << k) + 1][k]]) return st[i][k];
  return st[j - (1 << k) + 1][k];
}
int lca(int u, int v) { return e[rmq(h[u], h[v])]; }
int f(int u) {
  int &res = memo[u];
  if (res != -1) return res;
  res = ar[u];
  for (int v : adj[u])
    if (v != pr[u]) res += f(v);
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 0, i_ = (n - 1); i < i_; ++i) {
    int u, v;
    rdr, u, v;
    ;
    adj[u].push_back(v);
    adj[v].push_back(u);
    edges.emplace_back(u, v);
  }
  dfs(1, 0);
  init();
  int k;
  rdr, k;
  ;
  for (int i = 0, i_ = (k); i < i_; ++i) {
    int u, v;
    rdr, u, v;
    ;
    ++ar[u];
    ++ar[v];
    ar[lca(u, v)] -= 2;
  }
  memset(memo, -1, sizeof(memo));
  for (auto &e : edges) {
    int u = e.first, v = e.second;
    if (l[h[u]] < l[h[v]])
      cout << f(v);
    else
      cout << f(u);
    cout << ' ';
  }
  return 0;
}
