#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; struct Node { int v; int dist; Node(int v = -1, int dist = -1) { this->v = v; this->dist = dist; } }; const int MAX_N = 100010; vector E[MAX_N]; int main() { int N, M; cin >> N >> M; int p, q; for (int i = 0; i < M; ++i) { cin >> p >> q; E[p].push_back(q); E[q].push_back(p); } int Q; cin >> Q; int A; for (int i = 0; i < Q; ++i) { cin >> A; queue que; que.push(Node(A, 0)); bool visited[N + 1]; memset(visited, false, sizeof(visited)); int cnt = 0; int max_dist = 0; while (not que.empty()) { Node node = que.front(); que.pop(); if (visited[node.v]) continue; visited[node.v] = true; ++cnt; max_dist = max(max_dist, node.dist); for (int u : E[node.v]) { que.push(Node(u, node.dist + 1)); } } if (max_dist <= 1) { cout << cnt - 1 << " " << 0 << endl; } else { cout << cnt - 1 << " " << max(0, (int) ceil(log2(max_dist))) << endl; } } return 0; }