#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <math.h>
#define FILE_INP "hacker.inp"
#define MAXN 200010
#define MAXVAL 1000000001
using namespace std;
int n, m;
vector<int> eList[MAXN];
int d[MAXN];
int mark[MAXN];
void dfs(int i, int hackerDist) {
if (d[i] == hackerDist) {
mark[i]++;
return;
}
for (int k = 0; k < eList[i].size(); k++) {
int j = eList[i][k];
if (d[j] == -1) {
d[j] = d[i] + 1;
dfs(j, hackerDist);
}
}
}
void read(istream &fin)
{
int u, v, hackerDist;
fin >> n >> m;
for (int i = 0; i < n-1; i++) {
fin >> u >> v;
eList[u].push_back(v);
eList[v].push_back(u);
}
memset(mark, 0, sizeof(mark));
for (int i = 0; i < m; i++) {
fin >> u >> hackerDist;
memset(d, -1, sizeof(d));
d[u] = 0;
dfs(u, hackerDist);
}
int count = 0;
int res = 0;
for (int i = 0; i < n; i++) {
if (mark[i] == m) {
count ++;
res = i;
cout << i << endl;
}
}
cout << count << " " << res;
}
int main()
{
// ifstream fin(FILE_INP);
// read(fin);
read(cin);
// fin.close();
return 0;
}