#include <bits/stdc++.h>
#define INT long long
using namespace std;
char in[100], out[100];

vector <INT> V[200100];
vector <pair<INT, INT> > VV[200100];
vector <INT > ST;
INT p[200100], s[200100][2], j = 1, c[200100];
INT A[200100], B[200100], cc[200100], ccc[200100];
INT ch[200100][2];
vector <pair<pair<INT, pair<INT,INT> >, pair<INT, INT> > >AA;
vector <pair<INT, INT> > AAA;
void bfs(INT n){
    INT a, i;
    ST.push_back(1);
    while(ST.size()>0){
        a = ST.back();
        if(ccc[a]==0){
            ccc[a]=1;
            c[a] = j;
            s[j][0]= j;
            j++;
            for(i=V[a].size()-1;i>=0;i--){
                if(ccc[V[a][i]]==0){
                    ST.push_back(V[a][i]);
                    p[V[a][i]]=a;
                }
            }
        }else{
            ST.pop_back();
            s[c[a]][1] = j;
        }
    }
    return ;
}
INT f(INT n){
    INT ss = 0;
    while(n){
        ss = ss + A[n];
        n = n-(n&(-n));
    }
    return ss;
}
void g(INT n, INT k){
    while(n<200002){
        A[n] = k + A[n];
        n = n+(n&(-n));
    }
    return;
}
INT f1(INT n){
    INT ss = 0;
    while(n){
        ss = ss + B[n];
        n = n-(n&(-n));
    }
    return ss;
}
void g1(INT n, INT k){
    while(n<200002){
        B[n] = k + B[n];
        n = n+(n&(-n));
    }
    return;
}
int main(){
    INT n, m, k, a, b, e, i, b1, c1, d, ee=0, ii, I, choose, choose1;
    for(I=61;I<=80;I++){
    	AAA.clear();
    	AA.clear();
    	ST.clear();
    	for (i=0;i<200100;i++){
    		VV[i].clear();
    		V[i].clear();
    		p[i]=s[i][0]=s[i][1]=c[i]=A[i]=B[i]=cc[i]=ccc[i]=0;
		}
		sprintf(in,".%d.in",I);
	    freopen(in,"w",stdout);
	    n = m = k = (I-60)*(5000);
	    n = n - rand()%5;
	    m = m - rand()%10;
    	//scanf("%lld %lld %lld",&n, &m, &k);
    	printf("%lld %lld %lld\n", n, m, k);
	    for(i=2;i<=n;i++){
	        //scanf("%lld %lld",&a, &b);
	        a = i;
	        b = rand()%(i-1)+1;
	        ch[i][0]=a;
	        ch[i][1]=b;
	        printf("%lld %lld\n", a,b);
			V[a].push_back(b);
	        V[b].push_back(a);
	    }
	    bfs(1);
	    while(m--){
	    	choose = rand()%(n-1)+2;
	    	a = rand()%100000+1;
	    	b = a + rand()%100000;
	    	if(b>100000) b = 100000;
	    	choose1 = rand()%2;
	    	e = ch[choose][choose1];
	    	d = ch[choose][1-choose1];
	        //scanf("%lld %lld %lld %lld", &a, &b, &e, &d);
	        printf("%lld %lld %lld %lld\n",a,b,e,d);
	        if(p[e]==d){
	            VV[e].push_back({a,b});
	        }else{
	            VV[d].push_back({a,b});
	        }
	    }
	    for(i=1;i<=n;i++){
	        sort(VV[i].begin(),VV[i].end());
	        for(j=0;j<VV[i].size();j++){
	            if(j==0){
	                ee = VV[i][j].second;
	                AA.push_back({{VV[i][j].first,{0,0}},{0,i}});
	            }else{
	                if(ee < VV[i][j].first){
	                    AA.push_back({{ee,{2,0}},{0,i}});
	                    ee = VV[i][j].second;
	                    AA.push_back({{VV[i][j].first,{0,0}},{0,i}});
	                }
	                if(ee<VV[i][j].second) ee = VV[i][j].second;
	            }
	        }
	        if(j>0) AA.push_back({{ee,{2,0}},{0,i}});
	    }
	    for(i=1;i<=k;i++){
	    	a = rand()%100000+1;
	    	e = rand()%n+1;
	    	b = rand()%n+1;
	    	while(e==b){
	    		b = rand()%n+1;
	    		e = rand()%n+1;
			}
			//scanf("%lld %lld %lld", &a, &b, &e);
	        printf("%lld %lld %lld\n",a,b,e);
	        AA.push_back({{a,{1,i}},{b,e}});
	    }
	    sort(AA.begin(),AA.end());
	    for(i=0;i<AA.size();i++){
	        if(AA[i].first.second.first==0){
	            ii = c[AA[i].second.second];
	            g(s[ii][0],ii);
	            g(s[ii][1],-ii);
	            g1(s[ii][0],1);
	            g1(s[ii][1],-1);
	        }else if(AA[i].first.second.first==1){
	            b1 = c[AA[i].second.first];
	            c1 = c[AA[i].second.second];
	            ii = AA[i].first.second.second;
	            if(f(b1)==f(c1) and f1(b1)==f1(c1)) AAA.push_back({ii,1});
	            else AAA.push_back({ii,0});;
	        }else{
	            ii = c[AA[i].second.second];
	            g(s[ii][0],-ii);
	            g(s[ii][1],ii);
	            g1(s[ii][0],-1);
	            g1(s[ii][1],1);
	        }
	    }
	    sort(AAA.begin(),AAA.end());
	    sprintf(out,".%d.out",I);
	    freopen(out,"w",stdout);
	    for(i=0;i<AAA.size();i++){
	        if(AAA[i].second==1) printf("YES\n");
	        else printf("NO\n");
	    }
	}
    
}
