#include using namespace std; #define fio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); typedef long long ll; ll n,e,p; vector> g; vector changed; vector parent; vector rnk; ll find_set(ll x){ if (parent[x] != x){ parent[x] = find_set(parent[x]); changed.push_back(x); } return parent[x]; } void union_set(ll x, ll y){ if (rnk[x] < rnk[y]) swap(x,y); parent[y] = x; changed.push_back(y); rnk[x] += rnk[y]; } int main() { fio cin >> n >> e >> p; g.resize(n); parent.resize(n); rnk.resize(n,1ll); iota(parent.begin(),parent.end(),0ll); ll u,v; for (ll i = 0; i < e; i++){ cin >> u >> v; u--;v--; g[u].insert(v); g[v].insert(u); } for (ll i = 0; i < p; i++){ changed.clear(); ll num; cin >> num; vector a(num); unordered_set us; for (ll j = 0; j < num; j++){ cin >> a[j]; a[j]--; us.insert(a[j]); } for (ll x : a){ for (ll nb : g[x]){ if (us.count(nb)){ if (find_set(x) != find_set(nb)) union_set(x,nb); } } } ll res = 0; us.clear(); for (ll x : a) us.insert(find_set(x)); for (ll x : us) res++; cout << res << "\n"; for (ll x : changed){ parent[x] = x; rnk[x] = 1; } } return 0; }