#include <bits/stdc++.h> using namespace std; int main() { int n, m, q; cin >> n >> m >> q; vector<vector<int>> g(n + 1); for (int i = 0, u, v; i < m; i++) { cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } vector<int> fa(n + 1, 0), sz(n + 1, 0); // 仅对已染色点生效 vector<long long> col(n + 1, 0); // 0 表示未染色 function<int(int)> find = [&](int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }; auto unite = [&](int a, int b, int& mx) { a = find(a); b = find(b); if (a == b) return; if (sz[a] < sz[b]) swap(a, b); fa[b] = a; sz[a] += sz[b]; mx = max(mx, sz[a]); }; int mx = 0; while (q--) { int u; long long c; cin >> u >> c; col[u] = c; fa[u] = u; sz[u] = 1; mx = max(mx, 1); // 新建颜色块 for (int v : g[u]) if (col[v] == c) unite(u, v, mx); // 仅与同色邻点合并 cout << mx << '\n'; } return 0; }