#include<bits/stdc++.h>
using namespace std;
#define N 55
vector <int> V[N];
int n;
int A[N], B[N], VV[N][N];
 
char IN[50], OUT[50];

int ff(int n){
	int i, s = 1;
	for(i=0;i<V[n].size();i++){
		if(A[V[n][i]]==0){
			A[V[n][i]]=2;
			s = s+ff(V[n][i]);
		}
	}
	return s;
}
void f(int k, int m){
	int i, p; 
	if(k==0){
		A[1]=2;
		p = ff(1);
		B[p]++;
		/*if(p==1){
			for(i=1;i<=n;i++) if(A[i]==1) printf("%d ",i);
			printf("\n");
		}*/
		for(i=0;i<=n;i++) if(A[i]==2) A[i] = 0;
		return;
	}
	for(i=m;i<=n;i++){
		if(A[i]==0){
			A[i]=1;
			f(k-1, i);
			A[i]=0;
		}
	}
}
int main(){
	int I;
	for(I=1;I<50;I++){
		sprintf(IN, ".%d.in",I);
		freopen(IN,"w",stdout);
		int m, k, a, b,i, j ;
		n = ((I+9)/10)*10;
		m = n*(n-3)/3;
		m = min(m,150);
		k = rand()%5+1;
		printf("%d %d %d\n",n,m,k);
		//scanf("%d %d %d", &n, &m, &k);
		for(i=0;i<N;i++){
			V[i].clear(); 
			A[i]=B[i]=0;
		} 
		for(i=0;i<N;i++)for(j=0;j<N;j++) VV[i][j]=0; 
		for(i=0;i<m;i++){
			a = rand()%n+1;
			b = rand()%n+1;
			while(VV[a][b] or a == b){
				a = rand()%n+1;
				b = rand()%n+1;
			}
			VV[a][b] = 1;
			printf("%d %d\n",a ,b);
			//scanf("%d %d", &a, &b);
			V[a].push_back(b);
		}
		f(k, 2);
		sprintf(OUT, ".%d.out",I);
		freopen(OUT,"w",stdout);
		for(i=1;i<=n;i++){
			if(B[i]>0){
				printf("%d %d", i, B[i]);
				break;
			}
		}	
	}
	
}
