#include #define st first #define nd second #define pb push_back #define rep(i, a, b) for(int i = (a); i < (b); ++i) #define sci(x) int x; cin >> x; #define scvi(v, n) vector v(n); rep(i, 0, n) cin >> v[i]; using namespace std; typedef long long ll; typedef pair ii; typedef vector vi; const int duzo = 100007, sq = 300; int f[duzo], rang[duzo]; vector zmiany; int n, e, q, m; vector kraw; vector zap; set g[duzo]; int deb[duzo]; bool czy_zap[duzo]; inline void setf(int x, int par) { f[x] = par; zmiany.pb(x); } inline void setr(int x, int r) { rang[x] = r; zmiany.pb(x); } int fajnd(int x) { if(f[x] == x) return x; int faj = fajnd(f[x]); setf(x, faj); return faj; } void junion(int x, int y) { //cerr << "junion " << x << " " << y << endl; x = fajnd(x); y = fajnd(y); if(x == y) return; if(rang[y] > rang[x]) swap(x, y); if(rang[y] == rang[x]) setr(x, rang[x] + 1); setf(y, x); } void init() { for(int i = 1; i <= n; ++i) { f[i] = i; rang[i] = 1; } } void czysc() { for(auto x: zmiany) { rang[x] = 1; f[x] = x; } zmiany.clear(); } int licz() { int ilesp = 0; vector fdy; for(auto x: zap) { int fx = fajnd(x); if(deb[fx] == 0) { fdy.pb(fx); ++deb[fx]; ++ilesp; } } for(auto x: fdy) deb[x] = 0; czysc(); return ilesp; } int zap1() { int ss = zap.size(); for(int i = 0; i < ss; ++i) { for(int j = i + 1; j < ss; ++j) { if(g[zap[i]].count(zap[j]) != 0) junion(zap[i], zap[j]); } } //for(int i = 1; i <= n; ++i) cerr << fajnd(i) << " "; //cerr << endl; return licz(); } int zap2() { for(auto x: zap) czy_zap[x] = true; for(auto kr: kraw) { if(czy_zap[kr.st] && czy_zap[kr.nd]) junion(kr.st, kr.nd); } for(auto x: zap) czy_zap[x] = false; //for(int i = 1; i <= n; ++i) cerr << fajnd(i) << " "; //cerr << endl; return licz(); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> e >> q; init(); for(int i = 1; i <= e; ++i) { int a,b; cin >> a >> b; kraw.pb({a, b}); g[a].insert(b); g[b].insert(a); } for(int i = 1; i <= q; ++i) { //cerr << "zapytanie " << i << endl; //for(int i = 1; i <= n; ++i) cerr << fajnd(i) << " "; cin >> m; zap.clear(); for(int i = 1; i <= m; ++i) { int w; cin >> w; zap.pb(w); } if(m <= sq) cout << zap1() << '\n'; else cout << zap2() << '\n'; } return 0; }