#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<vector<int>> edges(n + 1);
    for (int i = 0; i < n - 1; ++i) {
        int u, v;
        cin >> u >> v;
        edges[u].push_back(v);
        edges[v].push_back(u);
    }

    // 构建子节点列表
    vector<int> parent(n + 1, 0);
    vector<vector<int>> children(n + 1);
    queue<int> q;
    q.push(1);
    parent[1] = 0;
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int v : edges[u]) {
            if (v != parent[u]) {
                parent[v] = u;
                children[u].push_back(v);
                q.push(v);
            }
        }
    }

    int k;
    cin >> k;
    vector<int> V(k);
    for (int i = 0; i < k; ++i) {
        cin >> V[i];
    }

    // 标记是否在集合 V 中
    vector<int> is_in_V(n + 1, 0);
    for (int node : V) {
        is_in_V[node] = 1;
    }

    // 计算 s 数组
    vector<long long> s(n + 1, 0);
    vector<pair<int, bool>> stack;
    stack.emplace_back(1, false);
    while (!stack.empty()) {
        auto [node, visited] = stack.back();
        stack.pop_back();
        if (!visited) {
            stack.emplace_back(node, true);
            // 逆序压入子节点以保证处理顺序正确
            for (auto it = children[node].rbegin(); it != children[node].rend(); ++it) {
                stack.emplace_back(*it, false);
            }
        } else {
            long long s_val = is_in_V[node];
            for (int child : children[node]) {
                s_val += s[child];
            }
            s[node] = s_val;
        }
    }

    // 计算 cnt 数组
    vector<long long> cnt(n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        long long total = s[i] * s[i];
        long long sum_child = 0;
        for (int child : children[i]) {
            sum_child += s[child] * s[child];
        }
        cnt[i] = total - sum_child;
    }

    // 输出结果
    for (int i = 1; i <= n; ++i) {
        cout << cnt[i] << ' ';
    }

    return 0;
}