#include using namespace std; using ll = long long; bool chmin(auto &a, auto b) { return a > b ? a = b, true : false; } bool chmax(auto &a, auto b) { return a < b ? a = b, true : false; } #include int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; cin >> N >> M; vector U(M), V(M); for (int i = 0; i < M; i++) { cin >> U[i] >> V[i]; U[i]--, V[i]--; } vector alive(M, true); int Q; cin >> Q; vector B(Q); for (int i = 0; i < Q; i++) { cin >> B[i]; alive[--B[i]] = false; } atcoder::dsu uf(N); ll S = (ll)N * (N - 1) / 2; auto MERGE = [&] (int u, int v) -> void { if (uf.same(u, v)) return; S -= (ll)uf.size(u) * uf.size(v); uf.merge(u, v); }; for (int i = 0; i < M; i++) { if (alive[i]) MERGE(U[i], V[i]); } vector ans(Q); for (int i = Q - 1; i >= 0; i--) { ans[i] = S; MERGE(U[B[i]], V[B[i]]); } for (int i = 0; i < Q; i++) { cout << ans[i] << '\n'; } }