#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair pii; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define R1(a) do{scanf("%d", &(a));}while(0) #define R2(a, b) do{scanf("%d%d", &(a), &(b));}while(0) #define R3(a, b, c) do{scanf("%d%d%d", &(a), &(b), &(c));}while(0) #define SV(vec) do{int s_v_;scanf("%d", &(s_v_));vec.PB(s_v_);}while(0) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; #define INF 1000000007 int n, m, q, from, to, sqn, qs, x, u[100014], cc; vector g[100014], qvec, ng[100014]; set edg; set qset; pair ge (int from, int to) { return MP(min(from, to), max(from, to)); } void go (int x) { if (u[x]) return; u[x] = 1; FOR(i, 0, (int)ng[x].size()) go(ng[x][i]); } int main () { R3(n, m, q); FOR(i, 0, m) { R2(from, to); g[from].PB(to); g[to].PB(from); edg.insert(ge(from, to)); } sqn = 1; while (sqn * sqn < n) ++sqn; FOR(qn, 0, q) { qvec.clear(); qset.clear(); R1(qs); FOR(i, 0, qs) { R1(x); qvec.PB(x); qset.insert(x); ng[x].clear(); u[x] = 0; } //always do O(W^2) approach FOR(i, 0, qs) FOR(j, i + 1, qs) { from = qvec[i]; to = qvec[j]; if (edg.count(ge(from, to))) { ng[from].PB(to); ng[to].PB(from); } } cc = 0; FOR(i, 0, qs) if (!u[qvec[i]]) { go(qvec[i]); ++cc; } printf("%d\n", cc); } return 0; }