#!/usr/bin/python
# -*- coding: utf8 -*-
#
# Задача "Большой квадратный кусок"
# Третья командная Интернет-олимпиада сезона 2010-2011, усложненный уровень
# Автор задачи: Антон Ахи
# Автор генератора: Владимир Ульянцев, ulyantsev@rain.ifmo.ru
#
# Простенький генератор без использования сторонних библиотек для генерации

MAXN = 10**9
MAXW = 10**9
MAXK = 10**5

hand = [
    ((10, 10, 2, [(1, 5), (0, 3)]), 'sample test'),
    ((4, 7, 0, []), 'sample test'),
    ((1, 1, 0, []), 'hand test'),
    ((1, 1, 1, [(0, 1)]), 'hand test'),
    ((1, 1, 4, [(0, 1), (1, 1), (0, 0), (1, 0)]), 'hand test'),
    ((1, MAXN, 0, []), 'hand test'),
    ((MAXN, 1, 1, [(0, MAXN / 2)]), 'hand test'),
    ((MAXN, MAXN, 0, []), 'hand test'),
    ((MAXN, MAXN, 1, [(0, 1)]), 'hand test'),
    ((MAXN, MAXN, 1, [(1, 1)]), 'hand test'),
    ((MAXN, MAXN, 1, [(1, 1)]), 'hand test'),
    ((MAXN, MAXN, 1, [(0, MAXN / 2)]), 'hand test'),
]

import random
from random import randint

test_number = 0

def open_output():
    global test_number
    test_number += 1
    num = '%d%d' % divmod(test_number, 10)
    print 'Generating test #' + num
    
    return open(num, "w")

def print_test(test, desc):
    ouf = open_output()
    print >>ouf, test
    print >>desc_file, ('%d%d' % divmod(test_number, 10)) + ': ' + desc
    ouf.close()

def test_to_string(test):
    (n, m, k, lines) = test
    test = '%d %d %d' % (n, m, k)
    test = test + ''.join(['\n%d %d' % (t, v) for t, v in lines])
    return test

def print_hand():
    for s in hand:
        print_test(test_to_string(s[0]), s[1])


def gen_random(n, m, k, flag):
    ls = []
    t = randint(0, 1)
    for i in xrange(k):
        t = randint(0, 1) if flag else t
        v = randint(0, n if t == 0 else m)
        ls += [(t, v)]
    return n, m, k, ls
        
if __name__ == '__main__':
    random.seed(392)
    desc_file = open('tests.desc', 'w')

    print_hand()

    for i in xrange(5):
        print_test(test_to_string(gen_random(randint(10, 100), randint(10, 100), randint(0, 100), True)), 'random medium test')

    for i in xrange(5):
        print_test(test_to_string(gen_random(randint(10, 100), randint(10, 100), randint(0, MAXK), True)), 'random medium test')

    for i in xrange(10):
        print_test(test_to_string(gen_random(randint(MAXK, MAXN), randint(MAXK, MAXN), MAXK, True)), 'random big test')

    for i in xrange(5):
        print_test(test_to_string(gen_random(randint(MAXK, MAXN), randint(MAXK, MAXN), MAXK, False)), 'random big test')

    for i in xrange(5):
        print_test(test_to_string(gen_random(MAXN, MAXN, MAXK, True)), 'random maxtest')

    desc_file.close()
