#include using namespace std; using ll = long long; // #define int ll using PII = pair; #define FOR(i, a, n) for (ll i = (ll)a; i < (ll)n; ++i) #define REP(i, n) FOR(i, 0, n) #define ALL(x) x.begin(), x.end() template T &chmin(T &a, const T &b) { return a = min(a, b); } template T &chmax(T &a, const T &b) { return a = max(a, b); } template bool IN(T a, T b, T x) { return a<=x&&x T ceil(T a, T b) { return a/b + !!(a%b); } template vector make_v(size_t a) { return vector(a); } template auto make_v(size_t a,Ts... ts) { return vector(ts...))>(a,make_v(ts...)); } template typename enable_if::value==0>::type fill_v(T &t, const V &v) { t=v; } template typename enable_if::value!=0>::type fill_v(T &t, const V &v ) { for(auto &e:t) fill_v(e,v); } template ostream &operator <<(ostream& out,const pair& a){ out<<'('< ostream &operator <<(ostream& out,const vector& a){ out<<'['; for(T i: a) {out<> n >> m; vector> g(n); REP(i, m) { ll u, v; cin >> u >> v; u--, v--; g[u].push_back(v); g[v].push_back(u); } ll q; cin >> q; while(q--) { ll s; cin >> s; s--; vector dist(n, LLINF); dist[s] = 0; priority_queue, greater> que; que.push({dist[s], s}); while(que.size()) { PII p = que.top(); que.pop(); if(p.first > dist[p.second]) continue; for(auto to: g[p.second]) { if(dist[to] > dist[p.second] + 1) { dist[to] = dist[p.second] + 1; que.push({dist[to], to}); } } } // cout << dist << endl; ll num = 0, ma = 1; REP(i, n) if(dist[i] != LLINF && i != s) num++, chmax(ma, dist[i]); ll d = 1, day = 0; while(d < ma) { d *= 2; day++; } cout << num << " " << day << endl; } return 0; }