#include <bits/stdc++.h>
using namespace std;
//
const int mx = 1e5 + 5;
const int S = 320;
//
struct hash_pair
{
template <class T1, class T2>
size_t operator () (const pair<T1, T2> &p) const
{
size_t hash1 = hash<T1>{}(p.first);
size_t hash2 = hash<T2>{}(p.second);
//
return hash1 ^ (hash2 + 0x9e3779b9 + (hash1 << 6) + (hash1 >> 2));
}
};
//
namespace real
{
int cnt, lab[mx];
//
void reset (int n)
{
cnt = n;
memset(lab, -1, sizeof lab);
}
int find_set (int v)
{
return lab[v] < 0 ? v : lab[v] = find_set(lab[v]);
}
void union_sets (int u, int v)
{
u = find_set(u);
v = find_set(v);
if (u == v)
return;
--cnt;
if (lab[u] > lab[v])
swap(u, v);
lab[u] += lab[v];
lab[v] = u;
}
}
namespace vir
{
int n, cnt, lab[mx];
unordered_map<int, int> mp;
//
void reset (void)
{
mp.clear();
fill(lab + 1, lab + cnt + 1, 0);
n = cnt = 0;
}
void make_set (int u)
{
++n, ++cnt;
mp[u] = n;
lab[n] = -1;
}
int find_set (int v)
{
return lab[v] < 0 ? v : lab[v] = find_set(lab[v]);
}
void union_sets (int u, int v)
{
if (mp.find(u) == mp.end())
make_set(u);
u = find_set(mp[u]);
if (mp.find(v) == mp.end())
make_set(v);
v = find_set(mp[v]);
if (u == v)
return;
--cnt;
if (lab[u] > lab[v])
swap(u, v);
lab[u] += lab[v];
lab[v] = u;
}
}
//
void process (void)
{
int n, m, k;
int a, b, lim, t[mx];
pair<int, int> p[mx];
unordered_set<pair<int, int>, hash_pair> edge, temp, delete_set;
//
cin >> n >> m >> k;
for (int i = 0; i < m; ++i)
{
cin >> a >> b;
if (a > b)
swap(a, b);
edge.insert(make_pair(a, b));
}
for (int i = 0; i < k; ++i)
{
cin >> t[i] >> a >> b;
if (a > b)
swap(a, b);
p[i] = make_pair(a, b);
}
real::reset(n);
for (auto it : edge)
real::union_sets(it.first, it.second);
cout << real::cnt;
for (int i = 0; i * S < k; ++i)
{
lim = min(k, (i + 1) * S);
delete_set.clear();
for (int j = i * S; j < lim; ++j)
if (t[j] == 2)
delete_set.insert(p[j]);
real::reset(n);
temp.clear();
for (auto it : edge)
if (delete_set.find(it) == delete_set.end())
real::union_sets(it.first, it.second);
else
temp.insert(it);
for (int j = i * S; j < lim; ++j)
{
if (t[j] == 1)
edge.insert(p[j]);
else
edge.erase(p[j]),
temp.erase(p[j]);
vir::reset();
for (auto it : temp)
vir::union_sets(real::find_set(it.first), real::find_set(it.second));
for (int d = i * S; d <= j; ++d)
if (t[d] != 2 && edge.find(p[d]) != edge.end())
vir::union_sets(real::find_set(p[d].first), real::find_set(p[d].second));
cout << ' ' << real::cnt - (vir::n - vir::cnt);
}
}
}
//
signed main (void)
{
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
process();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vCmNvbnN0IGludCBteCA9IDFlNSArIDU7CmNvbnN0IGludCBTID0gMzIwOwovLwpzdHJ1Y3QgaGFzaF9wYWlyCnsKICAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgICBzaXplX3Qgb3BlcmF0b3IgKCkgKGNvbnN0IHBhaXI8VDEsIFQyPiAmcCkgY29uc3QKICAgIHsKICAgICAgICBzaXplX3QgaGFzaDEgPSBoYXNoPFQxPnt9KHAuZmlyc3QpOwogICAgICAgIHNpemVfdCBoYXNoMiA9IGhhc2g8VDI+e30ocC5zZWNvbmQpOwogICAgICAgIC8vCiAgICAgICAgcmV0dXJuIGhhc2gxIF4gKGhhc2gyICsgMHg5ZTM3NzliOSArIChoYXNoMSA8PCA2KSArIChoYXNoMSA+PiAyKSk7CiAgICB9Cn07Ci8vCm5hbWVzcGFjZSByZWFsCnsKICAgIGludCBjbnQsIGxhYltteF07CiAgICAvLwogICAgdm9pZCByZXNldCAoaW50IG4pCiAgICB7CiAgICAgICAgY250ID0gbjsKICAgICAgICBtZW1zZXQobGFiLCAtMSwgc2l6ZW9mIGxhYik7CiAgICB9CiAgICBpbnQgZmluZF9zZXQgKGludCB2KQogICAgewogICAgICAgIHJldHVybiBsYWJbdl0gPCAwID8gdiA6IGxhYlt2XSA9IGZpbmRfc2V0KGxhYlt2XSk7CiAgICB9CiAgICB2b2lkIHVuaW9uX3NldHMgKGludCB1LCBpbnQgdikKICAgIHsKICAgICAgICB1ID0gZmluZF9zZXQodSk7CiAgICAgICAgdiA9IGZpbmRfc2V0KHYpOwogICAgICAgIGlmICh1ID09IHYpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAtLWNudDsKICAgICAgICBpZiAobGFiW3VdID4gbGFiW3ZdKQogICAgICAgICAgICBzd2FwKHUsIHYpOwogICAgICAgIGxhYlt1XSArPSBsYWJbdl07CiAgICAgICAgbGFiW3ZdID0gdTsKICAgIH0KfQpuYW1lc3BhY2UgdmlyCnsKICAgIGludCBuLCBjbnQsIGxhYltteF07CiAgICB1bm9yZGVyZWRfbWFwPGludCwgaW50PiBtcDsKICAgIC8vCiAgICB2b2lkIHJlc2V0ICh2b2lkKQogICAgewogICAgICAgIG1wLmNsZWFyKCk7CiAgICAgICAgZmlsbChsYWIgKyAxLCBsYWIgKyBjbnQgKyAxLCAwKTsKICAgICAgICBuID0gY250ID0gMDsKICAgIH0KICAgIHZvaWQgbWFrZV9zZXQgKGludCB1KQogICAgewogICAgICAgICsrbiwgKytjbnQ7CiAgICAgICAgbXBbdV0gPSBuOwogICAgICAgIGxhYltuXSA9IC0xOwogICAgfQogICAgaW50IGZpbmRfc2V0IChpbnQgdikKICAgIHsKICAgICAgICByZXR1cm4gbGFiW3ZdIDwgMCA/IHYgOiBsYWJbdl0gPSBmaW5kX3NldChsYWJbdl0pOwogICAgfQogICAgdm9pZCB1bmlvbl9zZXRzIChpbnQgdSwgaW50IHYpCiAgICB7CiAgICAgICAgaWYgKG1wLmZpbmQodSkgPT0gbXAuZW5kKCkpCiAgICAgICAgICAgIG1ha2Vfc2V0KHUpOwogICAgICAgIHUgPSBmaW5kX3NldChtcFt1XSk7CiAgICAgICAgaWYgKG1wLmZpbmQodikgPT0gbXAuZW5kKCkpCiAgICAgICAgICAgIG1ha2Vfc2V0KHYpOwogICAgICAgIHYgPSBmaW5kX3NldChtcFt2XSk7CiAgICAgICAgaWYgKHUgPT0gdikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIC0tY250OwogICAgICAgIGlmIChsYWJbdV0gPiBsYWJbdl0pCiAgICAgICAgICAgIHN3YXAodSwgdik7CiAgICAgICAgbGFiW3VdICs9IGxhYlt2XTsKICAgICAgICBsYWJbdl0gPSB1OwogICAgfQp9Ci8vCnZvaWQgcHJvY2VzcyAodm9pZCkKewogICAgaW50IG4sIG0sIGs7CiAgICBpbnQgYSwgYiwgbGltLCB0W214XTsKICAgIHBhaXI8aW50LCBpbnQ+IHBbbXhdOwogICAgdW5vcmRlcmVkX3NldDxwYWlyPGludCwgaW50PiwgaGFzaF9wYWlyPiBlZGdlLCB0ZW1wLCBkZWxldGVfc2V0OwogICAgLy8KICAgIGNpbiA+PiBuID4+IG0gPj4gazsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKQogICAgewogICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgaWYgKGEgPiBiKQogICAgICAgICAgICBzd2FwKGEsIGIpOwogICAgICAgIGVkZ2UuaW5zZXJ0KG1ha2VfcGFpcihhLCBiKSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7ICsraSkKICAgIHsKICAgICAgICBjaW4gPj4gdFtpXSA+PiBhID4+IGI7CiAgICAgICAgaWYgKGEgPiBiKQogICAgICAgICAgICBzd2FwKGEsIGIpOwogICAgICAgIHBbaV0gPSBtYWtlX3BhaXIoYSwgYik7CiAgICB9CgogICAgcmVhbDo6cmVzZXQobik7CiAgICBmb3IgKGF1dG8gaXQgOiBlZGdlKQogICAgICAgIHJlYWw6OnVuaW9uX3NldHMoaXQuZmlyc3QsIGl0LnNlY29uZCk7CiAgICBjb3V0IDw8IHJlYWw6OmNudDsKCiAgICBmb3IgKGludCBpID0gMDsgaSAqIFMgPCBrOyArK2kpCiAgICB7CiAgICAgICAgbGltID0gbWluKGssIChpICsgMSkgKiBTKTsKCiAgICAgICAgZGVsZXRlX3NldC5jbGVhcigpOwogICAgICAgIGZvciAoaW50IGogPSBpICogUzsgaiA8IGxpbTsgKytqKQogICAgICAgICAgICBpZiAodFtqXSA9PSAyKQogICAgICAgICAgICAgICAgZGVsZXRlX3NldC5pbnNlcnQocFtqXSk7CgogICAgICAgIHJlYWw6OnJlc2V0KG4pOwogICAgICAgIHRlbXAuY2xlYXIoKTsKICAgICAgICBmb3IgKGF1dG8gaXQgOiBlZGdlKQogICAgICAgICAgICBpZiAoZGVsZXRlX3NldC5maW5kKGl0KSA9PSBkZWxldGVfc2V0LmVuZCgpKQogICAgICAgICAgICAgICAgcmVhbDo6dW5pb25fc2V0cyhpdC5maXJzdCwgaXQuc2Vjb25kKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGVtcC5pbnNlcnQoaXQpOwoKICAgICAgICBmb3IgKGludCBqID0gaSAqIFM7IGogPCBsaW07ICsraikKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0W2pdID09IDEpCiAgICAgICAgICAgICAgICBlZGdlLmluc2VydChwW2pdKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWRnZS5lcmFzZShwW2pdKSwKICAgICAgICAgICAgICAgIHRlbXAuZXJhc2UocFtqXSk7CgogICAgICAgICAgICB2aXI6OnJlc2V0KCk7CiAgICAgICAgICAgIGZvciAoYXV0byBpdCA6IHRlbXApCiAgICAgICAgICAgICAgICB2aXI6OnVuaW9uX3NldHMocmVhbDo6ZmluZF9zZXQoaXQuZmlyc3QpLCByZWFsOjpmaW5kX3NldChpdC5zZWNvbmQpKTsKICAgICAgICAgICAgZm9yIChpbnQgZCA9IGkgKiBTOyBkIDw9IGo7ICsrZCkKICAgICAgICAgICAgICAgIGlmICh0W2RdICE9IDIgJiYgZWRnZS5maW5kKHBbZF0pICE9IGVkZ2UuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgdmlyOjp1bmlvbl9zZXRzKHJlYWw6OmZpbmRfc2V0KHBbZF0uZmlyc3QpLCByZWFsOjpmaW5kX3NldChwW2RdLnNlY29uZCkpOwoKICAgICAgICAgICAgY291dCA8PCAnICcgPDwgcmVhbDo6Y250IC0gKHZpcjo6biAtIHZpcjo6Y250KTsKICAgICAgICB9CiAgICB9Cn0KLy8Kc2lnbmVkIG1haW4gKHZvaWQpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKTsKICAgIHByb2Nlc3MoKTsKfQo=