#include using namespace std; struct unionfind{ vector par; unionfind(int n):par(n,-1){} int root(int x){return par[x]<0?x:par[x]=root(par[x]);} bool merge(int x,int y){ x=root(x);y=root(y); if(x==y) return false; if(par[x]>par[y]) swap(x,y); par[x]+=par[y];par[y]=x; return true; } bool same(int x,int y){return root(x)==root(y);} int size(int x){return -par[root(x)];} }; int main(){ int n,m; cin>>n>>m; int u[m],v[m]; for(int i=0;i>u[i]>>v[i]; u[i]--;v[i]--; } int q; cin>>q; int b[q]; for(int i=0;i>b[i],b[i]--; int check[m]{}; for(int i=0;i=0;i--){ c[i]=ans; if(!U.same(u[b[i]],v[b[i]])){ ans-=1LL*U.size(u[b[i]])*U.size(v[b[i]]); } U.merge(u[b[i]],v[b[i]]); } for(int i=0;i