// ~~ icebear love attttttt ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "friends"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 2e5 + 5;
const int THRESHOLD = 555;
int n, m, q;
bitset<N> heavyFriends[444];
vector<int> G[N], heavys;
int deg[N], id[N], rankDeg = -1;
array<int, 3> query[N];
map<ii, bool> heavyConnect;
bool isHeavy[N];
int cur[N];
void init(void) {
cin >> n >> m;
while(m--) {
int u, v;
cin >> u >> v;
G[u].pb(v);
G[v].pb(u);
deg[u]++; deg[v]++;
}
cin >> q;
FOR(i, 1, q) {
cin >> query[i][0] >> query[i][1] >> query[i][2];
if (query[i][0] == 1) deg[query[i][1]]++, deg[query[i][2]]++;
}
FOR(i, 1, n) isHeavy[i] = (deg[i] >= THRESHOLD);
FOR(i, 1, n)
if (isHeavy[i]) {
heavys.pb(i);
id[i] = ++rankDeg;
for(int v : G[i]) heavyFriends[id[i]].set(v);
heavyFriends[id[i]].set(i);
}
}
void process(void) {
int u, v;
FOR(i, 1, q) {
u = query[i][1];
v = query[i][2];
if (query[i][0] == 1) {
if (isHeavy[u]) heavyFriends[id[u]].set(v);
if (isHeavy[v]) heavyFriends[id[v]].set(u);
if (!isHeavy[u]) {
if (isHeavy[v]) {
for(int z : G[u]) if (isHeavy[z])
heavyConnect[{z, v}] = heavyConnect[{v, z}] = true;
}
G[u].pb(v);
}
if (!isHeavy[v]) {
if (isHeavy[u]) {
for(int z : G[u]) if (isHeavy[z])
heavyConnect[{z, u}] = heavyConnect[{u, z}] = true;
}
G[v].pb(u);
}
} else {
if (isHeavy[u] && isHeavy[v]) {
// pass light node
if (heavyConnect.find({u, v}) != heavyConnect.end()) cout << "YES\n";
else {
// pass heavy node
for(int x : heavys) if (heavyFriends[id[u]].test(x) && heavyFriends[id[v]].test(x)) {
cout << "YES\n";
exit(0);
}
cout << "NO\n";
}
} else {
bool ans = false;
if (isHeavy[v]) swap(u, v);
if (isHeavy[u]) {
if ((heavyFriends[id[u]].test(v))) ans = true;
for(int z : G[v])
if (heavyFriends[id[u]].test(z)) {
ans = true;
break;
}
} else {
cur[u] = cur[v] = i;
for(int z : G[u]) cur[z] = i;
for(int z : G[v]) if (cur[z] == i) ans = true;
}
cout << (ans ? "YES\n" : "NO\n");
}
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciBsb3ZlIGF0dHR0dHR0IH5+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CnR5cGVkZWYgcGFpcjxpbnQsIGlpPiBpaWk7Cgp0ZW1wbGF0ZTxjbGFzcyBUPgogICAgYm9vbCBtaW5pbWl6ZShUICZhLCBjb25zdCBUICZiKSB7CiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gYSA9IGIsIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWF4aW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhIDwgYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPD0oYik7ICsraSkKI2RlZmluZSBGT1JSKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPj0oYik7IC0taSkKI2RlZmluZSBSRVAoaSwgbikgZm9yKGludCBpPTA7IGk8KG4pOyArK2kpCiNkZWZpbmUgUkVEKGksIG4pIGZvcihpbnQgaT0obiktMTsgaT49MDsgLS1pKQojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgQklUKFMsIGkpICgoKFMpID4+IChpKSkgJiAxKQojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHRhc2sgImZyaWVuZHMiCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IGluZiA9IDFlOSArIDI3MDkyMDA4Owpjb25zdCBsbCBJTkYgPSAxZTE4ICsgMjcwOTIwMDg7CmNvbnN0IGludCBOID0gMmU1ICsgNTsKY29uc3QgaW50IFRIUkVTSE9MRCA9IDU1NTsKaW50IG4sIG0sIHE7CmJpdHNldDxOPiBoZWF2eUZyaWVuZHNbNDQ0XTsKdmVjdG9yPGludD4gR1tOXSwgaGVhdnlzOwppbnQgZGVnW05dLCBpZFtOXSwgcmFua0RlZyA9IC0xOwphcnJheTxpbnQsIDM+IHF1ZXJ5W05dOwptYXA8aWksIGJvb2w+IGhlYXZ5Q29ubmVjdDsKYm9vbCBpc0hlYXZ5W05dOwppbnQgY3VyW05dOwoKdm9pZCBpbml0KHZvaWQpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICB3aGlsZShtLS0pIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIEdbdV0ucGIodik7CiAgICAgICAgR1t2XS5wYih1KTsKICAgICAgICBkZWdbdV0rKzsgZGVnW3ZdKys7CiAgICB9CiAgICBjaW4gPj4gcTsKICAgIEZPUihpLCAxLCBxKSB7CiAgICAgICAgY2luID4+IHF1ZXJ5W2ldWzBdID4+IHF1ZXJ5W2ldWzFdID4+IHF1ZXJ5W2ldWzJdOwogICAgICAgIGlmIChxdWVyeVtpXVswXSA9PSAxKSBkZWdbcXVlcnlbaV1bMV1dKyssIGRlZ1txdWVyeVtpXVsyXV0rKzsKICAgIH0KICAgIEZPUihpLCAxLCBuKSBpc0hlYXZ5W2ldID0gKGRlZ1tpXSA+PSBUSFJFU0hPTEQpOwogICAgRk9SKGksIDEsIG4pCiAgICAgICAgaWYgKGlzSGVhdnlbaV0pIHsKICAgICAgICAgICAgaGVhdnlzLnBiKGkpOwogICAgICAgICAgICBpZFtpXSA9ICsrcmFua0RlZzsKICAgICAgICAgICAgZm9yKGludCB2IDogR1tpXSkgaGVhdnlGcmllbmRzW2lkW2ldXS5zZXQodik7CiAgICAgICAgICAgIGhlYXZ5RnJpZW5kc1tpZFtpXV0uc2V0KGkpOwogICAgICAgIH0KfQoKdm9pZCBwcm9jZXNzKHZvaWQpIHsKICAgIGludCB1LCB2OwogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICB1ID0gcXVlcnlbaV1bMV07CiAgICAgICAgdiA9IHF1ZXJ5W2ldWzJdOwogICAgICAgIGlmIChxdWVyeVtpXVswXSA9PSAxKSB7CiAgICAgICAgICAgIGlmIChpc0hlYXZ5W3VdKSBoZWF2eUZyaWVuZHNbaWRbdV1dLnNldCh2KTsKICAgICAgICAgICAgaWYgKGlzSGVhdnlbdl0pIGhlYXZ5RnJpZW5kc1tpZFt2XV0uc2V0KHUpOwogICAgICAgICAgICBpZiAoIWlzSGVhdnlbdV0pIHsKICAgICAgICAgICAgICAgIGlmIChpc0hlYXZ5W3ZdKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCB6IDogR1t1XSkgaWYgKGlzSGVhdnlbel0pCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXZ5Q29ubmVjdFt7eiwgdn1dID0gaGVhdnlDb25uZWN0W3t2LCB6fV0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgR1t1XS5wYih2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzSGVhdnlbdl0pIHsKICAgICAgICAgICAgICAgIGlmIChpc0hlYXZ5W3VdKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCB6IDogR1t1XSkgaWYgKGlzSGVhdnlbel0pCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXZ5Q29ubmVjdFt7eiwgdX1dID0gaGVhdnlDb25uZWN0W3t1LCB6fV0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgR1t2XS5wYih1KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpc0hlYXZ5W3VdICYmIGlzSGVhdnlbdl0pIHsKICAgICAgICAgICAgICAgIC8vIHBhc3MgbGlnaHQgbm9kZQogICAgICAgICAgICAgICAgaWYgKGhlYXZ5Q29ubmVjdC5maW5kKHt1LCB2fSkgIT0gaGVhdnlDb25uZWN0LmVuZCgpKSBjb3V0IDw8ICJZRVNcbiI7CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIGhlYXZ5IG5vZGUKICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggOiBoZWF2eXMpIGlmIChoZWF2eUZyaWVuZHNbaWRbdV1dLnRlc3QoeCkgJiYgaGVhdnlGcmllbmRzW2lkW3ZdXS50ZXN0KHgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIllFU1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiTk9cbiI7CiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYm9vbCBhbnMgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmIChpc0hlYXZ5W3ZdKSBzd2FwKHUsIHYpOwogICAgICAgICAgICAgICAgaWYgKGlzSGVhdnlbdV0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGhlYXZ5RnJpZW5kc1tpZFt1XV0udGVzdCh2KSkpIGFucyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCB6IDogR1t2XSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXZ5RnJpZW5kc1tpZFt1XV0udGVzdCh6KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGN1clt1XSA9IGN1clt2XSA9IGk7CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCB6IDogR1t1XSkgY3VyW3pdID0gaTsKICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHogOiBHW3ZdKSBpZiAoY3VyW3pdID09IGkpIGFucyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3V0IDw8IChhbnMgPyAiWUVTXG4iIDogIk5PXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwovLyAgICBjaW4gPj4gdGM7CiAgICB3aGlsZSh0Yy0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHByb2Nlc3MoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==