func_code_string: #include <bits/stdc++.h>   using namespace std;   long long read() {     long long f = 1, x = 0;     char s = getchar();     while (s <  0  || s >  9 ) {       if (s ==  - ) f = -f;       s = getchar();     }     while (s >=  0  && s <=  9 ) {       x = x * 10 + (s -  0 );       s = getchar();     }     return f * x;   }   int n, m, i, j, s, o, k;   int U[200005], V[200005];   vector<int> g[200005];   int fa[200005], ds[200005], siz[200005];   int findd(int x) {     if (x == fa[x]) return 0;     return findd(fa[x]) ^ ds[x];   }   int findf(int x) { return x == fa[x] ? x : findf(fa[x]); }   vector<int> st;   bool unionSet(int a, int b) {     int u = findf(a), v = findf(b);     if (siz[u] > siz[v]) swap(u, v), swap(a, b);     int d1 = findd(a), d2 = findd(b);     if (u == v) {       return d1 ^ d2;     }     if (d1 == d2)       ds[u] = 1;     else       ds[u] = 0;     siz[v] += siz[u];     fa[u] = v;     st.push_back(u);     return 1;   }   void POP() {     int u = st.back();     st.pop_back();     int v = fa[u];     ds[u] = 0;     siz[v] -= siz[u];     fa[u] = u;     return;   }   int maxl[200005];   int li[200005], ri[200005];   void solve(int l, int r, int l2, int r2) {     if (l > r || l2 > r2) return;     if (l2 == r2) {       for (int i = l; i <= r; i++) maxl[i] = l2;       return;     }     int mid = (l + r) >> 1, le = (int)st.size(), rr = max(l2, mid - 1);     int flag = 0;     for (int i = l; i <= mid; i++)       if (i) flag |= 1 ^ unionSet(U[i], V[i]);     int le2 = (int)st.size();     if (flag) rr = r2;     for (int i = min(r2, m); i > mid && i >= l2 && i > rr; i--) {       flag |= 1 ^ unionSet(U[i], V[i]);       if (flag) {         rr = i;         break;       }     }     maxl[mid] = rr;     while ((int)st.size() > le2) POP();     solve(mid + 1, r, rr, r2);     while ((int)st.size() > le) POP();     for (int i = min(r2, m); i >= rr; i--) unionSet(U[i], V[i]);     solve(l, mid - 1, l2, rr);     while ((int)st.size() > le) POP();     return;   }   int main() {     n = read();     m = read();     int Q = read();     for (int i = 1; i <= m; i++) {       s = read();       o = read();       g[s].push_back(o);       g[o].push_back(s);       U[i] = s;       V[i] = o;     }     int rr = 0;     for (int i = 1; i <= Q; i++)       li[i] = read(), ri[i] = read(), rr = max(li[i], rr);     for (int i = 1; i <= n; i++) fa[i] = i, ds[i] = 0, siz[i] = 1;     solve(0, m, 0, m + 1);     for (int i = 1; i <= Q; i++) {       s = li[i];       o = ri[i];       if (maxl[s - 1] > o)         printf( YES n );       else         printf( NO n );     }     return 0;   }   