import java.io.*;
import java.util.*;

public class Gen {

	static int done = 0;
	static ArrayList<Integer> data = new ArrayList<Integer>();

	static final Random rand = new Random(556668949239L);
	static final int MAX_N = (int) 1e5;
	static final int MAX_M = (int) 1e9;
	static final int MAX_COLOR = (int) 1e9;

	static void print() throws IOException {
		done++;
		System.err.println(done);
		PrintWriter out;
		if (done < 10)
			out = new PrintWriter("../tests/0" + String.valueOf(done));
		else
			out = new PrintWriter("../tests/" + String.valueOf(done));

		out.println(data.size() / 3);
		for (int i = 0; i < data.size(); i += 3) {
			out.println(data.get(i) + " " + data.get(i + 1) + " " + data.get(i + 2));
		}
		data.clear();
		out.close();
	}

	static long nextLong(long max) {
		return Math.abs(rand.nextLong()) % max;
	}

	static void genRandomTest(long n, int m)
			throws IOException {
		for (int i = 0; i < n; i++) {
			int l = rand.nextInt(m - 3);
			int r = l + 1 + rand.nextInt(m - l);
			int c = 1 + rand.nextInt(MAX_COLOR);
			data.add(l);
			data.add(r);
			data.add(c);
		}
		print();
	}

	static void genSample1() throws IOException {
		data.add(0);
		data.add(1);
		data.add(1);
		
		data.add(2);
		data.add(5);
		data.add(2);
		
		data.add(3);
		data.add(7);
		data.add(3);
		
		data.add(6);
		data.add(8);
		data.add(4);
		
		data.add(9);
		data.add(11);
		data.add(5);
		
		data.add(7);
		data.add(10);
		data.add(6);

		print();
	}
	
	static void genTest2() throws IOException {
		// don't use TreeSet, use PriorityQueue
		
		data.add(0);
		data.add(1);
		data.add(10);
		
		data.add(3);
		data.add(4);
		data.add(10);
		
		data.add(0);
		data.add(2);
		data.add(5);
		
		data.add(3);
		data.add(5);
		data.add(5);
		

		print();
	}

	public static void main(String[] args) throws IOException {
		File dir = new File("../tests");
		if (!dir.exists())
			dir.mkdir();
		done = 0;
		genSample1();
		genTest2();

		for (int i = 0; i < 15; i++)
			genRandomTest(5 + rand.nextInt(30), 20);

		for (int i = 0; i < 5; i++)
			genRandomTest(5 + rand.nextInt(30), MAX_M);

		for (int i = 0; i < 5; i++)
			genRandomTest(MAX_N, 200);

		for (int i = 0; i < 5; i++)
			genRandomTest(MAX_N, MAX_M);

		for (int i = 0; i < 10; i++)
			genRandomTest(MAX_N, 10000);
		
		return;
	}
}