#include #include #include #include #include #include #include #include #include #define ALL(obj) (obj).begin(),(obj).end() #define RALL(obj) (obj).rbegin(),(obj).rend() #define P pair #define MOD 1000000007 #define INF 2147483647 #define NINF (-2147483647-1) #define LLINF 9223372036854775807 using ll = long long; using namespace std; struct edge { int to; edge(int to) :to(to){} }; int main() { int N, M; cin >> N >> M; vector> G(N,vector()); for (int i = 0; i < M; i++) { int p, q; cin >> p >> q; p--; q--; G[p].push_back(edge(q)); G[q].push_back(edge(p)); } int Q; cin >> Q; vector visited(N); vector

ans(Q); for (int i = 0; i < Q; i++) { int a, m = -1, cnt = -1; cin >> a; a--; queue

que; fill(visited.begin(), visited.end(), false); que.push(P(a,0)); while (!que.empty()) { P p = que.front(); que.pop(); if (visited[p.first]) continue; visited[p.first] = true; cnt++; for (int j = 0; j < G[p.first].size(); j++) { que.push(P(G[p.first][j].to, p.second + 1)); } m = max(m, p.second); } ans[i].first = cnt; ans[i].second = max(0,m-1); } for (int i = 0; i < Q; i++) { cout << ans[i].first << " " << ans[i].second << endl; } getchar(); getchar(); return 0; }