#pragma GCC optimize("O3") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using P = pair; using T = tuple; template inline T chmax(T &a, const T b) {return a = (a < b) ? b : a;} template inline T chmin(T &a, const T b) {return a = (a > b) ? b : a;} constexpr int MOD = 1e9 + 7; constexpr int inf = 1e9; constexpr long long INF = 1e18; #define all(a) (a).begin(), (a).end() int dx[] = {1, 0, -1, 0}; int dy[] = {0, 1, 0, -1}; class UnionFind{ public: vector par; vector rank; vector sz; int uf_size; UnionFind(int n){ par.resize(n); rank.resize(n); sz.resize(n); uf_size = n; for(int i=0; i>n>>m; vector> G(n); for(int i=0; i>p>>q; p--, q--; G[p].emplace_back(q); G[q].emplace_back(p); } int q; cin>>q; while(q--){ int a; cin>>a; a--; UnionFind uf(n); queue

que; que.emplace(a, 0); vector visited(n, false); visited[a] = true; int madist = 0; while(que.size()){ int cv, dist; tie(cv, dist) = que.front(); que.pop(); chmax(madist, dist); for(auto nv:G[cv]){ if(visited[nv]) continue; visited[nv] = true; uf.unite(cv, nv); que.emplace(nv, dist + 1); } } int day = (madist + 1) / 2; if(madist == 1) day = 0; cout << uf.size(a) - 1 << " " << day << endl; } return 0; }