#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(3,"Ofast","inline")
const int mod=1e9+7;
const int N=1e5;
int q,a[N];
const int n1=5,n2=5,m=5,w=100;//可自行调参
inline int rnd(){
int f=0;
// f=rand()%2;
if(f)f=-1;
else f=1;
if(rand()%100==0)return f*rand()%w+1;
else return f*(rand()<<16|rand())%w+1;
}
inline void tree(int k){
int p[N],f[N],d[N];
for(int i=1;i<=n2;i++)p[i]=f[i]=d[i]=0;
for(int i=1;i<=n2-2;i++)p[i]=rnd()%n2+1,d[p[i]]++;p[n2-1]=n2;
for(int i=1,j=1;i<n2;i++,j++){
while(d[j])++j; f[j]=p[i];
while(i<n2&&!--d[p[i]]&&p[i]<j)f[p[i]]=p[i+1],++i;
}
for(int i=1;i<n2;i++)cout<<i<<" "<<f[i]<<"\n";
}
inline void qj(int k){
int x,l,r;
for(int i=1;i<=k;i++){
x=rand()%n1,l=rand()%n1+1,r=rand()%n1+1;
if(l>r)swap(l,r);
if(x==0)printf("%d %d\n",l,l);
else printf("%d %d\n",l,r);
}
}
signed main(){
srand(time(NULL));
// freopen("in.in","w",stdout);
printf("%d %d %d\n",n1,n2,m);
for(int i=1;i<=n1;i++){
printf("%d %d %d\n",rnd()%n2+1,rnd()%n2+1,rnd());
}
tree(n2);
for(int i=1;i<=m;i++){
int opt=rand()%3+1;
printf("%d ",opt);
if(opt==1)qj(1);
if(opt==2)printf("%d\n",rand()%n2+1);
if(opt==3)printf("%d\n",rand()%n2+1);
}
return 0;
}