#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, Q, x, y, cnt, head[N], fa[N], dep[N];
int f[N];
long long w[N], sz[N], Sz[N], ans;
struct edge {
  int to, nxt;
} e[N << 1];
void adde(int x, int y) {
  e[++cnt].to = y;
  e[cnt].nxt = head[x];
  head[x] = cnt;
}
long long C(long long x) { return (long long)x * (x - 1) * (x - 2); }
long long sqr(long long x) { return x * x; }
void dfs(int u, int par) {
  Sz[u] = 1, w[u] = 0;
  for (int i = head[u], v; i; i = e[i].nxt)
    if (v = e[i].to, v != par) {
      fa[v] = u, dep[v] = dep[u] + 1;
      dfs(v, u);
      Sz[u] += Sz[v], w[u] += sqr(Sz[v]);
    }
  w[u] += sqr(n - Sz[u]);
}
int getfa(int x) { return x == f[x] ? x : f[x] = getfa(f[x]); }
void merge(int x, int y) {
  y = getfa(y);
  ans -= (sqr(n - sz[x]) - w[x]) * sz[x] + C(sz[x]) +
         sz[x] * (sz[x] - 1) * (n - sz[x]) * 2;
  ans -= (sqr(n - sz[y]) - w[y]) * sz[y] + C(sz[y]) +
         sz[y] * (sz[y] - 1) * (n - sz[y]) * 2;
  f[x] = y;
  w[y] += w[x] - sqr(Sz[x]) - sqr(n - Sz[x]), sz[y] += sz[x];
  ans += (sqr(n - sz[y]) - w[y]) * sz[y] + C(sz[y]) +
         sz[y] * (sz[y] - 1) * (n - sz[y]) * 2;
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n - 1); i++)
    scanf("%d%d", &x, &y), adde(x, y), adde(y, x);
  dfs(1, 0);
  for (int x = (1); x <= (n); x++) {
    sz[x] = 1, f[x] = x;
    ans += (sqr(n - sz[x]) - w[x]) * sz[x] + C(sz[x]) +
           sz[x] * (sz[x] - 1) * (n - sz[x]) * 2;
  }
  printf("%lld\n", ans);
  scanf("%d", &Q);
  while (Q--) {
    scanf("%d%d", &x, &y), x = getfa(x), y = getfa(y);
    while (x != y) {
      if (dep[x] < dep[y]) swap(x, y);
      merge(x, fa[x]), x = getfa(fa[x]);
    }
    printf("%lld\n", ans);
  }
  return 0;
}
