#include <bits/stdc++.h>
using namespace std;
char in[100], out[100];

int A[30][3];
int Ck[30], n, B[30];
int g(int cur){
	int s = 0,i ;
	if(cur == 1){
		return 1;	
	} 
	for(i=cur-1;i>0 and A[cur][0]-A[cur][1]<=A[i][0] ; i--){
		if(Ck[i]==0 and (A[i][2]==1 or i==1)){
			s += g(i);
		} 
	}
	return s;
}
int f(int cur){
	int s = 0, i;
	if(cur == n) return g(n);
	for(i=cur+1;A[i][0]<=A[cur][0]+A[cur][1] and i<=n;i++){
		Ck[i] = 1;
		s += f(i);
		Ck[i] = 0;
	}
	return s;
}
int main(){
	int d, s, a, i, I, m, t,j;
	for(I=20;I<23;I++){
		for(i=0;i<30;i++)A[i][0]=A[i][1]=A[i][2]=Ck[i]=0;
		//scanf("%d", &n);
		n = min(20,I+4);
		B[0] = 0;
		for(i=1;i<=n;i++){
			t = 1;
			while(t){
				t = 0;
				B[i]= rand()%100+1;
				for(j=0;j<i;j++){
					if(B[i] == B[j]) t = 1;
				}
			}
		}
		sort(B,B+n);
		for(i=0;i<n;i++){
			A[i+1][0] = B[i];
			A[i+1][1] = rand()%min(100,n*5)+1;
			if(rand()%5==0) A[i+1][2]=0;	
			else A[i+1][2]=1;
			
		}
		A[n][2] = 1;
		sprintf(in,".%d.in",I);
        freopen(in,"w",stdout);
        printf("%d\n",n);
        for(i=1;i<=n;i++) printf("%d %d %d\n",A[i][0],A[i][1],A[i][2]);
		sprintf(out,".%d.out",I);
        freopen(out,"w",stdout);
		t = f(1);	
		if(t>0) I--;
		printf("I will solve 1000 problems.");
	}
}
