#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back #define mp make_pair #define sortvi(a) sort(a.begin(), a.end()) #define FOR(i, start, final) for (int i=start; i<=final; ++i) #define ROF(i, start, final) for (int i=start; i>=final; --i) #define f cin #define g cout //void f(int &x){char k;for(k=getchar();k<= 32;k=getchar());for(x=0;'0'<=k;k=getchar())x=x*10+k-'0';} /*void f(int &x)//parsare cu semn { char k; bool semn=0; for (k = getchar(); (k>'9' || k<'0');) { if (k=='-') semn=1; k=getchar(); } for (x = 0; '0' <= k; k = getchar()) x = x * 10 + k - '0'; if (semn==1) x=-x; }*/ using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair < int, int> pi; typedef vector< int > vi; typedef vector< pair< int, int > > vpi; int N, K, a[305], b[305], d[305], sol, x, y; vector < int > G[1005]; bool srv[1005], inQ[1005]; queue < int > Q; //ifstream f("test.in");ofstream g("test.out"); int main() { f>>N>>K; FOR(i,1,N)d[i]=(1<<30); FOR(i,1,K)f>>a[i], Q.push(a[i]), d[a[i]]=0, inQ[a[i]]=1; FOR(i,1,K)f>>b[i], srv[b[i]]=1; FOR(i,2,N) { f>>x>>y; G[x].push_back(y); G[y].push_back(x); } while (Q.size()) { int nod=Q.front(); Q.pop(); inQ[nod]=0; vector < int>::iterator it=G[nod].begin(); for (; it!=G[nod].end(); ++it) if (d[nod]+1