#include #define nmax 100001 #define mmax 400001 using namespace std; int grad[nmax], nr = 0, N; struct edge { int f, s; } v[mmax]; void add_edge(int x, int y) { ++grad[x]; ++grad[y]; ++nr; v[nr].f = x; v[nr].s = y; } void delete_edge(int x) { int p, q; p = v[x].f; q = v[x].s; --grad[p]; --grad[q]; } void question (int x, int y){ if (x > y) y = x; bool ok = 1; for (int i = 1; i < x; ++i) if (grad[i] != 0) ok = 0, i = x+1; if (ok) for (int i = y + 1; i <= N; ++i) if (grad[i] != 0) ok = 0, i = N + 1; if (ok) printf ("YES\n"); else printf ("NO\n"); } int main() { //freopen ("graph.in", "r", stdin); int M, i, a, b, c; scanf ("%d %d", &N, &M); for (i = 1; i <= M; ++i) { scanf ("%d %d", &a, &b); if (a == 1) scanf ("%d", &c), add_edge(b, c); if (a == 2) delete_edge (b); if (a == 3) scanf ("%d", &c), question (b, c); } return 0; }