Autonomier @ 2019-12-29 12:44:20
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 500050
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
int n,m;
int fa[maxn];
int head[maxn];
int dam[maxn];//记录哪个星球被破坏
bool da[maxn];//是否已经破坏
int res[maxn];//记录答案
struct Eage
{
int nt;
int fr;
int to;
}e[maxn*2];
int cnt;
inline void update(int u,int v)
{
e[++cnt].nt=head[u];
e[cnt].fr=u;
e[cnt].to=v;
head[u]=cnt;
}
inline int find(int x)
{
while(fa[x]!=x)
{
x=fa[x];
// cout<<1;
}
return x;
}
int main()
{
n=read();
m=read();
for(int i=1;i<=m;i++)
{
int u,v;
u=read();
v=read();
update(u,v);
update(v,u);
}
for(int i=0;i<=n;i++)
{
fa[i]=i;
}
int k=read();
//int trans=k;
int sum=n-k;
for(int i=1;i<=k;i++)
{
dam[i]=read();
da[dam[i]]=true;
}
for(int i=1;i<=m*2;i++)
{
if(!da[e[i].fr]&&!da[e[i].to]&&find(e[i].fr)!=find(e[i].to))
{
sum--;
fa[find(e[i].fr)]=find(e[i].to);
}
}
res[k+1]=sum;
//da[dam[k]]=false;
for(int l=k;l>=1;l--)
{
//cout<<k;
sum++;
da[dam[l]]=false;
for(int i=head[dam[l]];i;i=e[i].nt)
{
if(!da[e[i].fr]&&!da[e[i].to]&&find(e[i].fr)!=find(e[i].to))
{
sum--;
fa[find(e[i].fr)]=find(e[i].to);
}
}
res[l]=sum;
}
//cout<<888;
for(int i=1;i<=k+1;i++)
{
printf("%d\n",res[i]);
}
return 0;
}