#include<cstdio>
#include<vector>
using namespace std;
#define maxn 30005
int father[maxn],dad[maxn],qx[maxn],qy[maxn],ans[maxn],depth[maxn];
vector<int>t[maxn],ques[maxn];
inline int input() {
char c=getchar();int x=0,flag=1;
for(;c<‘0‘||c>‘9‘;c=getchar())
if(c==‘-‘) flag=-1;
for(;c>=‘0‘&&c<=‘9‘;c=getchar())
x=(x<<1)+(x<<3)+c-‘0‘;
return x*flag;
}
inline int find(int x) {
return father[x]==x?x:father[x]=find(father[x]);
}
void dfs(int x) {
father[x]=x;
depth[x]=depth[dad[x]]+1;
for(int i=0;i<t[x].size();i++)
if(dad[x]!=t[x][i])
dad[t[x][i]]=x,dfs(t[x][i]);
for(int i=0,y;i<ques[x].size();i++)
if(dad[y=qx[ques[x][i]]^qy[ques[x][i]]^x])
ans[ques[x][i]]=find(y);
father[x]=dad[x];
return;
}
int main() {
int n=input();
for(int i=1;i<n;i++) {
int u=input(),v=input();
t[u].push_back(v);
t[v].push_back(u);
}
int m=input(),tx,ty,sum=0;
tx=input();
for(int i=1;i<m;i++) {
ty=input();
qx[i]=tx;qy[i]=ty;
ques[qx[i]].push_back(i);
ques[qy[i]].push_back(i);
tx=ty;
}
dfs(1);
for(int i=1;i<m;i++)
sum+=(depth[qx[i]]+depth[qy[i]]-(depth[ans[i]]*2));
printf("%d",sum);
return 0;
}