from random import randint as R

import sys
import math


def lcm(a, b):
    return abs(a * b) // math.gcd(a, b)


def rand_year():
    return R(1800, 2021)


def rand_pair():
    return R(1, 99), R(1, 99)


def case():
    y, a, b = 1, 1, 1
    while y + lcm(a, b) <= 2021:
        y, (a, b) = rand_year(), rand_pair()
    return y, a, b


def case_to_str(c):
    return " ".join(str(e) for e in c)


def problem(n=99):
    n_cases = [str(n)] + [case_to_str(case()) for _ in range(n)]
    return "\n".join(n_cases)


def write_problem(fname, p):
    with open(fname, "w") as fout:
        fout.write(p + "\n")


def flatten(lst):
    for a, b in lst:
        yield a
        yield b


def main(N):
    up = list(range(1, 100))
    down = list(reversed(list(range(1, 100))))
    interleaved = list(zip(up, down))
    for idx, cid in enumerate(flatten(interleaved)):
        if N <= 0:
            break
        write_problem(f"{(idx+1):03}.in", problem(cid))
        N -= 1


if __name__ == "__main__":
    from sys import argv

    if len(argv) < 2:
        exit("Usage: generator N (which results in N files written)")
    main(int(argv[1]))
