#include #include using namespace std; using namespace atcoder; #define int long long signed main(){ int N,M; cin >> N >> M; vector> bridge(M); for(int i = 0;i < M;i++){ int u,v; cin >> u >> v; u--,v--; if(u > v) swap(u,v); bridge[i].first = u; bridge[i].second = v; } int Q; cin >> Q; vector col(Q); map m; for(int i = 0;i < Q;i++){ cin >> col[i]; col[i]--; m[col[i]]++; } dsu d(N); for(int i = 0;i < M;i++){ if(m[i]) continue; d.merge(bridge[i].first,bridge[i].second); } int ans = N * (N-1)/2; auto gr = d.groups(); for(auto to : gr){ int n = (int)to.size(); ans -= n * (n-1)/2; } vector vec; for(int i = Q-1;i >= 0;i--){ vec.push_back(ans); int d1 = d.size(bridge[col[i]].first); int d2 = d.size(bridge[col[i]].second); if(d.same(bridge[col[i]].first,bridge[col[i]].second))continue; else{ ans -= d1 * d2; d.merge(bridge[col[i]].first,bridge[col[i]].second); } } reverse(vec.begin(),vec.end()); for(auto to : vec) cout << to << endl; }