#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const ll N=2e5;
ll n,m,k,edge[2*N][3],fa[2*N],cnt;
bool vis[2*N];
stack<ll>record;
stack<ll>answer;
ll find(ll x){return fa[x]==x?x:fa[x]=find(fa[x]);}
signed main()
{
IOS;
cin>>n>>m;
for(ll i=1,u,v;i<=m;i++){
cin>>u>>v;
edge[i][1]=u;
edge[i][2]=v;
}
cin>>k;
for(ll i=1,s;i<=k;i++){
cin>>s;
record.push(s);
vis[s]=true;
}
cnt=n-k;
for(ll i=1;i<=n;i++)fa[i]=i;
while(!record.empty()){
for(ll i=1,u,v;i<=m;i++){
u=edge[i][1];
v=edge[i][2];
if((edge[i][0]==1)||vis[u]||vis[v]||(u=find(u))==(v=find(v)))continue;
fa[find(u)]=find(v);
edge[i][0]=1;
--cnt;
}
answer.push(cnt);
vis[record.top()]=false;
++cnt;
record.pop();
}
for(ll i=1,u,v;i<=m;i++){
u=edge[i][1];
v=edge[i][2];
if(edge[i][0]||vis[u]||vis[v]||(u=find(u))==(v=find(v)))continue;
fa[find(u)]=find(v);
edge[i][0]=1;
--cnt;
}
cout<<cnt<<"\n";
while(!answer.empty()){
cout<<answer.top()<<"\n";
answer.pop();
}
return 0;
}