#include #include using namespace std; int main(){ using ll=long long; ll n,m; cin>>n>>m; vector> edge(m); for (int i=0;i>u>>v; u--;v--; edge[i]={u,v}; } int q; cin>>q; vector b(q); vector use(q,true); for (int i=0;i>b[i]; b[i]--; use[b[i]]=false; } atcoder::dsu uf(n); for (int i=0;i ans(q); ans[q-1]=n*(n-1)/2; for (auto v:uf.groups()){ ans[q-1]-=ll(v.size())*(v.size()-1)/2; } for (int i=q-1;i>=1;i--){ auto [u,v]=edge[b[i]]; ll cnt=0; if (!uf.same(u,v)){ cnt=ll(uf.size(u))*uf.size(v); uf.merge(u,v); } if (i) ans[i-1]=ans[i]; ans[i-1]-=cnt; } for (int i=0;i