// Задача "Красивая таблица результатов"
// 10-ая Всероссийская командная олимпиада школьников по программированию
// Автор генератора тестов: Владимир Ульянцев, ulyantsev@rain.ifmo.ru

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

public class StandingTestsGen implements Runnable {
    public static void main(String[] args) {
        if (args.length < 1) {
        	for (I = 1; (new File(getName(I) + ".t")).exists(); I++);
        } else {
            I = Integer.parseInt(args[0]);
        }
        new Thread(new StandingTestsGen()).start();
    }

    PrintWriter out;

    Random random = new Random(20091103L);

    static int I;

    static String getName(int i) {
    	return ((i < 10) ? "0" : "") + i;
    }
    
    void open() {
        try {
        	System.out.println("Generating test " + I);
            out = new PrintWriter(getName(I));
        } catch (FileNotFoundException e) {        	
        	e.printStackTrace();
        	System.exit(-1);
        }
    }

    void close() {
        out.close();
        I++;
    }

    final int MAXN = 100;
    final int MAXM = 1000000000;
    final int C = 4 * 232792560;

    void genRandom(int n, int m, int r) {
    	open();

    	out.println(n + " " + m);
    	int cur = m;
    	for (int i = 0; i < n; i++) {
    		if (i > 0) {
				out.print(" ");
			}
			
			if (cur != 0)
	    		cur = cur - random.nextInt(cur / r + 2);
    		while (cur > 0 && m % cur != 0) {
    			cur--;
    		}
			out.print(cur);
    	}
    	out.println();
    	
    	close();
    }

    void genAnotherRandom(int n, int m) {
    	open();

    	ArrayList<Integer> divisors = new ArrayList<Integer>();
    	
    	divisors.add(0);
    	for (int i = 1; i <= Math.pow(m + 1, 0.5); i++) {
    		if (m % i == 0) {
    			divisors.add(i);
    			divisors.add(m / i);
    		}
    	}

    	int[] elements = new int[n]; 
		
		for (int i = 0; i < n; i++) {
			elements[i] = divisors.get(random.nextInt(divisors.size()));
		}

    	Arrays.sort(elements);

    	out.println(n + " " + m);
    	for (int i = 0; i < n; i++) {
    		if (i > 0) {
				out.print(" ");
			}
			
			out.print(elements[n - i - 1]);
    	}
    	out.println();
    	
    	close();
    }

    void genZero(int n, int m) {
    	open();
    	
		out.println(n + " " + m);
		for (int i = 0; i < n; i++) {
			if (i > 0) {
				out.print(" ");
			}
			out.print("0");
		}
		out.println();

    	close();
    }

    void genPair(int n) {
    	open();
    	
    	int m = random.nextInt((int)Math.sqrt(MAXM)) + 1;

		out.println(n + " " + m * (m - 1));
		for (int i = 0; i < n / 2; i++) {
			if (i > 0) {
				out.print(" ");
			}
			out.print(m);
		}
		for (int i = n / 2; i < n; i++) {
			out.print(" " + (m - 1));
		}
		out.println();

    	close();
    }


    public void solve() throws IOException {
		for (int i = 0; i < 5; i++) {
			genRandom(random.nextInt(10) + 1, random.nextInt(20) + 1, 2);
		}
		
		for (int i = 0; i < 5; i++) {
			genRandom(random.nextInt(10) + 1, random.nextInt(1000) + 1, 2);
		}

		for (int i = 0; i < 5; i++) {
			genAnotherRandom(random.nextInt(MAXN) + 1, random.nextInt(MAXM) + 1);
		}

		for (int i = 0; i < 5; i++) {
			genAnotherRandom(MAXN, MAXM * 9 / 10 + random.nextInt(MAXM / 10));
		}

		for (int i = 0; i < 5; i++) {
			int sm = 1 + random.nextInt((int)Math.sqrt(MAXM));
			genAnotherRandom(MAXN, sm * (sm - 1));
		}

		for (int i = 0; i < 5; i++) {
			genPair(MAXN);
		}

    	//zero tests
    	for (int i = 0; i < 5; i++) {
    		genZero(random.nextInt(MAXN) + 1, random.nextInt(MAXM) + 1);
    	}
    	for (int i = 0; i < 5; i++) {
    		genZero(random.nextInt(MAXN) + 1, C);
    	}
    	genZero(MAXN, C);
    	
    }

    public void run() {
        try {
            solve();
        } catch (Throwable e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }
}
