#include using namespace std; using ll = long long; using pll = pair; #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); const ll MOD1000000007 = 1000000007; const ll MOD998244353 = 998244353; const ll MOD[3] = {999727999, 1070777777, 1000000007}; const ll LINF = 1LL << 60LL; const int IINF = (1 << 30) - 1; struct union_find{ vector par; vector siz; union_find(int n) : par(n), siz(n, 1){ for(int i=0; i> n >> m; vector> es(m); for(int i=0; i> es[i].first >> es[i].second; es[i].first--; es[i].second--; } int q; cin >> q; vector b(q); vector used(m, false); for(int i=0; i> b[i]; b[i]--; used[b[i]] = true; } vector ans(q, 0); union_find uf(n); for(int i=0; i=1; i--){ auto [u, v] = es[b[i]]; if(!uf.same(u, v)){ ans[i-1] = ans[i] - (ll)uf.size(u) * (ll)uf.size(v); uf.unite(u, v); }else{ ans[i-1] = ans[i]; } } for(int i=0; i> T; while(T--) solve(); }