#include #include using namespace std; #define MAX 1234567 int N, M, K, components; int E[MAX][2]; int boss[MAX], D[MAX], damaged[MAX], answer[MAX]; int sef(int x) { if (x == boss[x]) return x; else return boss[x] = sef(boss[x]); } void join(int x, int y) { x = sef(x); y = sef(y); if (x == y) return; --components; if (rand() & 1) boss[x] = y; else boss[y] = x; } int main() { scanf("%d%d", &N, &M); components = N; for (int n=1; n<=N; ++n) boss[n]=n; for (int m=1; m<=M; ++m) scanf("%d%d", &E[m][0], &E[m][1]); scanf("%d", &K); for (int k=1; k<=K; ++k) { scanf("%d", &D[k]); damaged[D[k]] = 1; } for (int m=1; m<=M; ++m) if (!damaged[m]) join(E[m][0], E[m][1]); answer[0] = components-1; for (int k=K; k>=1; --k) { join(E[D[k]][0], E[D[k]][1]); answer[K+1-k] = components-1; } for (int k=K; k>=0; --k) printf("%d\n", answer[k]); return 0; }